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);