/// \file UpcastablePointer.cpp // // This file is distributed under the MIT License. See LICENSE.md for details. // #include "revng/ADT/UpcastablePointer.h" template concept UniquePtrLike = requires(T A, typename T::pointer B) { std::is_pointer_v; typename T::element_type; { A.get() } -> std::same_as; { A.reset(B) } -> std::same_as; { T() }; { T(B) }; }; class TestClass { public: static bool classof(TestClass *) { return true; } }; template<> struct concrete_types_traits { using type = std::tuple; }; // Test UniquePtrLike static_assert(UniquePtrLike>); static_assert(not UniquePtrLike); static_assert(UniquePtrLike>); static_assert(Upcastable); // Test UpcastablePointerLike static_assert(UpcastablePointerLike); static_assert(UpcastablePointerLike>); static_assert(UpcastablePointerLike>); static_assert(std::is_default_constructible_v>); static_assert(std::is_copy_assignable_v>); static_assert(std::is_copy_constructible_v>); static_assert(std::is_move_assignable_v>); static_assert(std::is_move_constructible_v>); int main() { return 0; }