23 #include <type_traits>
39 template<
typename T,
typename U>
41 T down_cast(U* u) noexcept
43 SPOT_ASSERT(
dynamic_cast<T
>(u));
44 return static_cast<T
>(u);
47 template<
typename T,
typename U>
49 T down_cast(
const std::shared_ptr<U>& u) noexcept
51 SPOT_ASSERT(std::dynamic_pointer_cast<typename T::element_type>(u));
52 return std::static_pointer_cast<typename T::element_type>(u);
55 template<
typename T,
typename U>
63 return static_cast<T
>(u);
65 return dynamic_cast<T
>(u);
Definition: automata.hh:27