// PR c++/67348 // { dg-do compile { target c++20 } } // { dg-skip-if "requires hosted libstdc++ for vector" { ! hostedlib } } #include #include using namespace std; template requires (is_destructible::value && ...) struct variant { ~variant() { /* ... */ } ~variant() requires (is_trivially_destructible::value && ...) = default; variant(variant&&) { /* ... */ } variant(variant&&) requires (is_trivially_move_constructible::value && ...) = default; variant& operator=(variant&&) { /* ... */ } variant& operator=(variant&&) requires (is_trivially_move_assignable::value && ...) = default; // ...similar treatment for copy construction / assignment... }; static_assert(is_trivially_destructible>()); static_assert(!is_trivially_destructible>>()); static_assert(is_trivially_move_constructible>()); static_assert(!is_trivially_move_constructible>>());