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:26