// Copyright 2023 Peter Dimov // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include using namespace boost::variant2; #define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__) struct X1 { }; STATIC_ASSERT( std::is_nothrow_move_constructible::value ); STATIC_ASSERT( std::is_trivially_destructible::value ); struct X2 { ~X2() {} }; STATIC_ASSERT( std::is_nothrow_move_constructible::value ); STATIC_ASSERT( !std::is_trivially_destructible::value ); struct X3 { X3( X3&& ) {} }; STATIC_ASSERT( !std::is_nothrow_move_constructible::value ); STATIC_ASSERT( std::is_trivially_destructible::value ); struct X4 { ~X4() {} X4( X4&& ) {} }; STATIC_ASSERT( !std::is_nothrow_move_constructible::value ); STATIC_ASSERT( !std::is_trivially_destructible::value ); // STATIC_ASSERT( !variant::uses_double_storage() ); STATIC_ASSERT( !variant::uses_double_storage() ); STATIC_ASSERT( !variant::uses_double_storage() ); STATIC_ASSERT( variant::uses_double_storage() ); STATIC_ASSERT( variant::uses_double_storage() );