50 using Ptr = std::shared_ptr<int>;
54 static_assert(std::constructible_from<Ptr, int*>);
55 static_assert(!std::convertible_to<int*, Ptr>);
58 static_assert(std::constructible_from<NNPtr, Ptr>);
59 static_assert(!std::convertible_to<Ptr, NNPtr>);
62 using Ref = std::reference_wrapper<int>;
63 static_assert(std::constructible_from<Ref, int&>);
64 static_assert(std::convertible_to<int&, Ref>);
66 using UniqPtr = std::unique_ptr<int>;
70 static_assert(std::is_nothrow_constructible_v<NNPtr, NNPtr&>);
71 static_assert(std::is_nothrow_constructible_v<NNPtr, const NNPtr&>);
72 static_assert(std::is_nothrow_constructible_v<NNUniqPtr, NNUniqPtr&&>);
73 static_assert(!std::is_constructible_v<NNUniqPtr, NNUniqPtr&>);
74 static_assert(!std::is_constructible_v<NNUniqPtr, const NNUniqPtr&>);
75 static_assert(!std::is_constructible_v<NNPtr, const NNUniqPtr&>);
78 static_assert(!std::is_nothrow_constructible_v<NNPtr, NNUniqPtr&&>);
79 static_assert(std::is_constructible_v<NNPtr, NNUniqPtr&&>);
82 static_assert(std::convertible_to<NNUniqPtr&&, UniqPtr>);
83 static_assert(std::convertible_to<const NNPtr&, Ptr>);
84 static_assert(std::convertible_to<NNPtr&&, Ptr>);