template<typename U>
friend class Owned;
+ template<typename R, typename S>
+ friend Owned<R> dynamic_owned_cast(Owned<S> &&);
+
public:
Owned() = default;
pool.destroy(this->ptr);
}
+
+template<typename T, typename S>
+Owned<T> dynamic_owned_cast(Owned<S> &&src)
+{
+ T *ptr = dynamic_cast<T *>(src.get());
+ if(!ptr)
+ return Owned<T>();
+
+ Owned<T> result;
+ result.ptr = ptr;
+ src.ptr = nullptr;
+ return result;
+}
+
} // namespace Msp::Game
#endif