12 template<
typename T,
typename Arg>
13 T* rtti_cast(Arg
object)
15 return object &&
object->get_type().template is_derived_from<T>() ?
16 reinterpret_cast<T*
>(object) :
nullptr;
26 template<
typename Derived,
typename Base>
27 std::unique_ptr<Derived> rtti_cast(std::unique_ptr<Base>& pointer)
29 if (Derived *result = rtti_cast<Derived>(pointer.get()))
32 return std::unique_ptr<Derived>(result);
34 return std::unique_ptr<Derived>(
nullptr);