14 constexpr std::shared_ptr<T> as_shared(std::unique_ptr<T>&& ptr)
16 return std::shared_ptr<T>(std::move(ptr));
26 template <
typename To,
typename From>
27 constexpr std::unique_ptr<To> static_unique_pointer_cast(std::unique_ptr<From>&& old)
29 return std::unique_ptr<To>(
static_cast<To*
>(old.release()));
39 template <
typename To,
typename From>
40 constexpr std::unique_ptr<To> reinterpret_unique_pointer_cast(std::unique_ptr<From>&& old)
42 return std::unique_ptr<To>(
reinterpret_cast<To*
>(old.release()));
52 template <
typename To,
typename From>
53 constexpr std::unique_ptr<To> dynamic_unique_pointer_cast(std::unique_ptr<From>&& old)
55 return std::unique_ptr<To>(
dynamic_cast<To*
>(old.release()));