Port to C++11

This commit is contained in:
Peter Dimov
2018-10-18 07:19:45 +03:00
parent 38b20dd503
commit 90cc6b7374
12 changed files with 508 additions and 398 deletions

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@
import testing ;
import ../../config/checks/config : requires ;
project : requirements [ requires cxx11_variadic_templates cxx11_template_aliases cxx11_decltype cxx11_hdr_type_traits cxx14_constexpr ] ;
project : requirements [ requires cxx11_variadic_templates cxx11_template_aliases cxx11_decltype cxx11_hdr_type_traits cxx11_constexpr ] ;
run variant_size.cpp ;
run variant_alternative.cpp ;
@ -42,19 +42,19 @@ run variant_in_place_type_construct.cpp ;
compile variant_in_place_type_construct_cx.cpp ;
run variant_copy_assign.cpp ;
compile variant_copy_assign_cx.cpp ;
compile variant_copy_assign_cx.cpp : [ requires cxx14_constexpr ] ;
run variant_move_assign.cpp ;
compile variant_move_assign_cx.cpp ;
compile variant_move_assign_cx.cpp : [ requires cxx14_constexpr ] ;
run variant_value_assign.cpp ;
compile variant_value_assign_cx.cpp ;
compile variant_value_assign_cx.cpp : [ requires cxx14_constexpr ] ;
run variant_emplace_index.cpp ;
compile variant_emplace_index_cx.cpp ;
compile variant_emplace_index_cx.cpp : [ requires cxx14_constexpr ] ;
run variant_emplace_type.cpp ;
compile variant_emplace_type_cx.cpp ;
compile variant_emplace_type_cx.cpp : [ requires cxx14_constexpr ] ;
run variant_swap.cpp ;
run variant_eq_ne.cpp ;

View File

@ -108,7 +108,7 @@ int main()
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v), 0 );
variant<int, int, float, std::string> v2( in_place_index<1>, 1 );
variant<int, int, float, std::string> v2( in_place_index_t<1>{}, 1 );
v = v2;
BOOST_TEST_EQ( v.index(), 1 );
@ -150,19 +150,19 @@ int main()
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v).v, 1 );
variant<X1, X2> v3( in_place_index<1>, 2 );
variant<X1, X2> v3( in_place_index_t<1>{}, 2 );
v = v3;
BOOST_TEST_EQ( v.index(), 1 );
BOOST_TEST_EQ( get<1>(v).v, 2 );
variant<X1, X2> const v4( in_place_index<1>, 3 );
variant<X1, X2> const v4( in_place_index_t<1>{}, 3 );
v = v4;
BOOST_TEST_EQ( v.index(), 1 );
BOOST_TEST_EQ( get<1>(v).v, 3 );
variant<X1, X2> const v5( in_place_index<0>, 4 );
variant<X1, X2> const v5( in_place_index_t<0>{}, 4 );
v = v5;
BOOST_TEST_EQ( v.index(), 0 );

View File

@ -60,7 +60,7 @@ int main()
}
{
variant<int, int, float> v1, v2, v3( in_place_index<1> ), v4( in_place_index<1> ), v5( 3.14f ), v6( 3.14f );
variant<int, int, float> v1, v2, v3( in_place_index_t<1>{} ), v4( in_place_index_t<1>{} ), v5( 3.14f ), v6( 3.14f );
BOOST_TEST( v1 == v2 );
BOOST_TEST_NOT( v1 != v2 );

View File

@ -24,111 +24,111 @@ struct X
int main()
{
{
variant<int> v( in_place_index<0> );
variant<int> v( in_place_index_t<0>{} );
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v), 0 );
}
{
variant<X> v( in_place_index<0> );
variant<X> v( in_place_index_t<0>{} );
BOOST_TEST_EQ( v.index(), 0 );
}
{
variant<int> v( in_place_index<0>, 1 );
variant<int> v( in_place_index_t<0>{}, 1 );
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v), 1 );
}
{
variant<int, float> v( in_place_index<0> );
variant<int, float> v( in_place_index_t<0>{} );
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v), 0 );
}
{
variant<int, float> v( in_place_index<0>, 1 );
variant<int, float> v( in_place_index_t<0>{}, 1 );
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v), 1 );
}
{
variant<int, float> v( in_place_index<1> );
variant<int, float> v( in_place_index_t<1>{} );
BOOST_TEST_EQ( v.index(), 1 );
BOOST_TEST_EQ( get<1>(v), 0 );
}
{
variant<int, float> v( in_place_index<1>, 3.14f );
variant<int, float> v( in_place_index_t<1>{}, 3.14f );
BOOST_TEST_EQ( v.index(), 1 );
BOOST_TEST_EQ( get<1>(v), 3.14f );
}
{
variant<int, int, float, float, std::string, std::string> v( in_place_index<0>, 1 );
variant<int, int, float, float, std::string, std::string> v( in_place_index_t<0>{}, 1 );
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v), 1 );
}
{
variant<int, int, float, float, std::string, std::string> v( in_place_index<1>, 1 );
variant<int, int, float, float, std::string, std::string> v( in_place_index_t<1>{}, 1 );
BOOST_TEST_EQ( v.index(), 1 );
BOOST_TEST_EQ( get<1>(v), 1 );
}
{
variant<int, int, float, float, std::string, std::string> v( in_place_index<2>, 3.14f );
variant<int, int, float, float, std::string, std::string> v( in_place_index_t<2>{}, 3.14f );
BOOST_TEST_EQ( v.index(), 2 );
BOOST_TEST_EQ( get<2>(v), 3.14f );
}
{
variant<int, int, float, float, std::string, std::string> v( in_place_index<3>, 3.14f );
variant<int, int, float, float, std::string, std::string> v( in_place_index_t<3>{}, 3.14f );
BOOST_TEST_EQ( v.index(), 3 );
BOOST_TEST_EQ( get<3>(v), 3.14f );
}
{
variant<int, int, float, float, std::string, std::string> v( in_place_index<4>, "text" );
variant<int, int, float, float, std::string, std::string> v( in_place_index_t<4>{}, "text" );
BOOST_TEST_EQ( v.index(), 4 );
BOOST_TEST_EQ( get<4>(v), std::string("text") );
}
{
variant<int, int, float, float, std::string, std::string> v( in_place_index<5>, "text" );
variant<int, int, float, float, std::string, std::string> v( in_place_index_t<5>{}, "text" );
BOOST_TEST_EQ( v.index(), 5 );
BOOST_TEST_EQ( get<5>(v), std::string("text") );
}
{
variant<int, int, float, float, std::string, std::string> v( in_place_index<5>, 4, 'a' );
variant<int, int, float, float, std::string, std::string> v( in_place_index_t<5>{}, 4, 'a' );
BOOST_TEST_EQ( v.index(), 5 );
BOOST_TEST_EQ( get<5>(v), std::string( 4, 'a' ) );
}
{
variant<int, int, float, float, std::string, std::string> v( in_place_index<4>, { 'a', 'b', 'c' } );
variant<int, int, float, float, std::string, std::string> v( in_place_index_t<4>{}, { 'a', 'b', 'c' } );
BOOST_TEST_EQ( v.index(), 4 );
BOOST_TEST_EQ( get<4>(v), (std::string{ 'a', 'b', 'c' }) );
}
{
variant<int, int, float, float, std::string, std::string> v( in_place_index<5>, { 'a', 'b', 'c' }, std::allocator<char>() );
variant<int, int, float, float, std::string, std::string> v( in_place_index_t<5>{}, { 'a', 'b', 'c' }, std::allocator<char>() );
BOOST_TEST_EQ( v.index(), 5 );
BOOST_TEST_EQ( get<5>(v), (std::string{ 'a', 'b', 'c' }) );

View File

@ -27,89 +27,89 @@ struct X
int main()
{
{
constexpr variant<int> v( in_place_index<0> );
constexpr variant<int> v( in_place_index_t<0>{} );
STATIC_ASSERT( v.index() == 0 );
STATIC_ASSERT( get<0>(v) == 0 );
}
{
constexpr variant<X> v( in_place_index<0> );
constexpr variant<X> v( in_place_index_t<0>{} );
STATIC_ASSERT( v.index() == 0 );
}
{
constexpr variant<int> v( in_place_index<0>, 1 );
constexpr variant<int> v( in_place_index_t<0>{}, 1 );
STATIC_ASSERT( v.index() == 0 );
STATIC_ASSERT( get<0>(v) == 1 );
}
{
constexpr variant<int, float> v( in_place_index<0> );
constexpr variant<int, float> v( in_place_index_t<0>{} );
STATIC_ASSERT( v.index() == 0 );
STATIC_ASSERT( get<0>(v) == 0 );
}
{
constexpr variant<int, float> v( in_place_index<0>, 1 );
constexpr variant<int, float> v( in_place_index_t<0>{}, 1 );
STATIC_ASSERT( v.index() == 0 );
STATIC_ASSERT( get<0>(v) == 1 );
}
{
constexpr variant<int, float> v( in_place_index<1> );
constexpr variant<int, float> v( in_place_index_t<1>{} );
STATIC_ASSERT( v.index() == 1 );
STATIC_ASSERT( get<1>(v) == 0 );
}
{
constexpr variant<int, float> v( in_place_index<1>, 3.14f );
constexpr variant<int, float> v( in_place_index_t<1>{}, 3.14f );
STATIC_ASSERT( v.index() == 1 );
STATIC_ASSERT( get<1>(v) == 3.14f );
}
{
constexpr variant<int, int, float, float, X, X> v( in_place_index<0>, 1 );
constexpr variant<int, int, float, float, X, X> v( in_place_index_t<0>{}, 1 );
STATIC_ASSERT( v.index() == 0 );
STATIC_ASSERT( get<0>(v) == 1 );
}
{
constexpr variant<int, int, float, float, X, X> v( in_place_index<1>, 1 );
constexpr variant<int, int, float, float, X, X> v( in_place_index_t<1>{}, 1 );
STATIC_ASSERT( v.index() == 1 );
STATIC_ASSERT( get<1>(v) == 1 );
}
{
constexpr variant<int, int, float, float, X, X> v( in_place_index<2>, 3.14f );
constexpr variant<int, int, float, float, X, X> v( in_place_index_t<2>{}, 3.14f );
STATIC_ASSERT( v.index() == 2 );
STATIC_ASSERT( get<2>(v) == 3.14f );
}
{
constexpr variant<int, int, float, float, X, X> v( in_place_index<3>, 3.14f );
constexpr variant<int, int, float, float, X, X> v( in_place_index_t<3>{}, 3.14f );
STATIC_ASSERT( v.index() == 3 );
STATIC_ASSERT( get<3>(v) == 3.14f );
}
{
constexpr variant<int, int, float, float, X, X> v( in_place_index<4> );
constexpr variant<int, int, float, float, X, X> v( in_place_index_t<4>{} );
STATIC_ASSERT( v.index() == 4 );
}
{
constexpr variant<int, int, float, float, X, X> v( in_place_index<5>, 0, 0 );
constexpr variant<int, int, float, float, X, X> v( in_place_index_t<5>{}, 0, 0 );
STATIC_ASSERT( v.index() == 5 );
}

View File

@ -24,7 +24,7 @@ struct X
int main()
{
{
variant<int> v( in_place_type<int> );
variant<int> v( in_place_type_t<int>{} );
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v), 0 );
@ -33,7 +33,7 @@ int main()
}
{
variant<X> v( in_place_type<X> );
variant<X> v( in_place_type_t<X>{} );
BOOST_TEST_EQ( v.index(), 0 );
@ -41,7 +41,7 @@ int main()
}
{
variant<int> v( in_place_type<int>, 1 );
variant<int> v( in_place_type_t<int>{}, 1 );
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v), 1 );
@ -50,7 +50,7 @@ int main()
}
{
variant<int, float> v( in_place_type<int> );
variant<int, float> v( in_place_type_t<int>{} );
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v), 0 );
@ -59,7 +59,7 @@ int main()
}
{
variant<int, float> v( in_place_type<int>, 1 );
variant<int, float> v( in_place_type_t<int>{}, 1 );
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v), 1 );
@ -68,7 +68,7 @@ int main()
}
{
variant<int, float> v( in_place_type<float> );
variant<int, float> v( in_place_type_t<float>{} );
BOOST_TEST_EQ( v.index(), 1 );
BOOST_TEST_EQ( get<1>(v), 0 );
@ -77,7 +77,7 @@ int main()
}
{
variant<int, float> v( in_place_type<float>, 3.14f );
variant<int, float> v( in_place_type_t<float>{}, 3.14f );
BOOST_TEST_EQ( v.index(), 1 );
BOOST_TEST_EQ( get<1>(v), 3.14f );
@ -86,7 +86,7 @@ int main()
}
{
variant<int, int, float, std::string> v( in_place_type<float>, 3.14f );
variant<int, int, float, std::string> v( in_place_type_t<float>{}, 3.14f );
BOOST_TEST_EQ( v.index(), 2 );
BOOST_TEST_EQ( get<2>(v), 3.14f );
@ -95,7 +95,7 @@ int main()
}
{
variant<int, int, float, float, std::string> v( in_place_type<std::string>, "text" );
variant<int, int, float, float, std::string> v( in_place_type_t<std::string>{}, "text" );
BOOST_TEST_EQ( v.index(), 4 );
BOOST_TEST_EQ( get<4>(v), std::string("text") );
@ -104,7 +104,7 @@ int main()
}
{
variant<int, int, float, float, std::string> v( in_place_type<std::string>, 4, 'a' );
variant<int, int, float, float, std::string> v( in_place_type_t<std::string>{}, 4, 'a' );
BOOST_TEST_EQ( v.index(), 4 );
BOOST_TEST_EQ( get<4>(v), std::string( 4, 'a' ) );
@ -113,7 +113,7 @@ int main()
}
{
variant<int, int, float, float, std::string> v( in_place_type<std::string>, { 'a', 'b', 'c' } );
variant<int, int, float, float, std::string> v( in_place_type_t<std::string>{}, { 'a', 'b', 'c' } );
BOOST_TEST_EQ( v.index(), 4 );
BOOST_TEST_EQ( get<4>(v), (std::string{ 'a', 'b', 'c' }) );
@ -122,7 +122,7 @@ int main()
}
{
variant<int, int, float, float, std::string> v( in_place_type<std::string>, { 'a', 'b', 'c' }, std::allocator<char>() );
variant<int, int, float, float, std::string> v( in_place_type_t<std::string>{}, { 'a', 'b', 'c' }, std::allocator<char>() );
BOOST_TEST_EQ( v.index(), 4 );
BOOST_TEST_EQ( get<4>(v), (std::string{ 'a', 'b', 'c' }) );

View File

@ -22,7 +22,7 @@ struct X
int main()
{
{
constexpr variant<int> v( in_place_type<int> );
constexpr variant<int> v( in_place_type_t<int>{} );
STATIC_ASSERT( v.index() == 0 );
STATIC_ASSERT( get<0>(v) == 0 );
@ -31,7 +31,7 @@ int main()
}
{
constexpr variant<X> v( in_place_type<X> );
constexpr variant<X> v( in_place_type_t<X>{} );
STATIC_ASSERT( v.index() == 0 );
@ -39,7 +39,7 @@ int main()
}
{
constexpr variant<int> v( in_place_type<int>, 1 );
constexpr variant<int> v( in_place_type_t<int>{}, 1 );
STATIC_ASSERT( v.index() == 0 );
STATIC_ASSERT( get<0>(v) == 1 );
@ -48,7 +48,7 @@ int main()
}
{
constexpr variant<int, float> v( in_place_type<int> );
constexpr variant<int, float> v( in_place_type_t<int>{} );
STATIC_ASSERT( v.index() == 0 );
STATIC_ASSERT( get<0>(v) == 0 );
@ -57,7 +57,7 @@ int main()
}
{
constexpr variant<int, float> v( in_place_type<int>, 1 );
constexpr variant<int, float> v( in_place_type_t<int>{}, 1 );
STATIC_ASSERT( v.index() == 0 );
STATIC_ASSERT( get<0>(v) == 1 );
@ -66,7 +66,7 @@ int main()
}
{
constexpr variant<int, float> v( in_place_type<float> );
constexpr variant<int, float> v( in_place_type_t<float>{} );
STATIC_ASSERT( v.index() == 1 );
STATIC_ASSERT( get<1>(v) == 0 );
@ -75,7 +75,7 @@ int main()
}
{
constexpr variant<int, float> v( in_place_type<float>, 3.14f );
constexpr variant<int, float> v( in_place_type_t<float>{}, 3.14f );
STATIC_ASSERT( v.index() == 1 );
STATIC_ASSERT( get<1>(v) == 3.14f );
@ -84,7 +84,7 @@ int main()
}
{
constexpr variant<int, int, float, X> v( in_place_type<float>, 3.14f );
constexpr variant<int, int, float, X> v( in_place_type_t<float>{}, 3.14f );
STATIC_ASSERT( v.index() == 2 );
STATIC_ASSERT( get<2>(v) == 3.14f );
@ -93,7 +93,7 @@ int main()
}
{
constexpr variant<int, int, float, float, X> v( in_place_type<X> );
constexpr variant<int, int, float, float, X> v( in_place_type_t<X>{} );
STATIC_ASSERT( v.index() == 4 );
@ -101,7 +101,7 @@ int main()
}
{
constexpr variant<int, int, float, float, X> v( in_place_type<X>, 0, 0 );
constexpr variant<int, int, float, float, X> v( in_place_type_t<X>{}, 0, 0 );
STATIC_ASSERT( v.index() == 4 );

View File

@ -62,7 +62,7 @@ int main()
}
{
variant<int, int, float> v1, v2, v3( in_place_index<1> ), v4( in_place_index<1> ), v5( 3.14f ), v6( 3.14f );
variant<int, int, float> v1, v2, v3( in_place_index_t<1>{} ), v4( in_place_index_t<1>{} ), v5( 3.14f ), v6( 3.14f );
TEST_EQ( v1, v2 )
TEST_LE( v1, v3 )

View File

@ -108,7 +108,7 @@ int main()
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v), 0 );
variant<int, int, float, std::string> v2( in_place_index<1>, 1 );
variant<int, int, float, std::string> v2( in_place_index_t<1>{}, 1 );
v = std::move(v2);
BOOST_TEST_EQ( v.index(), 1 );
@ -150,19 +150,19 @@ int main()
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v).v, 1 );
variant<X1, X2> v3( in_place_index<1>, 2 );
variant<X1, X2> v3( in_place_index_t<1>{}, 2 );
v = std::move(v3);
BOOST_TEST_EQ( v.index(), 1 );
BOOST_TEST_EQ( get<1>(v).v, 2 );
variant<X1, X2> v4( in_place_index<1>, 3 );
variant<X1, X2> v4( in_place_index_t<1>{}, 3 );
v = std::move(v4);
BOOST_TEST_EQ( v.index(), 1 );
BOOST_TEST_EQ( get<1>(v).v, 3 );
variant<X1, X2> v5( in_place_index<0>, 4 );
variant<X1, X2> v5( in_place_index_t<0>{}, 4 );
v = std::move(v5);
BOOST_TEST_EQ( v.index(), 0 );

View File

@ -130,7 +130,7 @@ int main()
BOOST_TEST_EQ( v.index(), 0 );
BOOST_TEST_EQ( get<0>(v), 0 );
variant<int, int, float, std::string> v2( in_place_index<1>, 1 );
variant<int, int, float, std::string> v2( in_place_index_t<1>{}, 1 );
BOOST_TEST_EQ( v2.index(), 1 );
BOOST_TEST_EQ( get<1>(v2), 1 );
@ -215,7 +215,7 @@ int main()
BOOST_TEST_EQ( v2.index(), 0 );
BOOST_TEST_EQ( get<0>(v2).v, 0 );
variant<X1, X2> v3( in_place_index<1>, 2 );
variant<X1, X2> v3( in_place_index_t<1>{}, 2 );
BOOST_TEST_EQ( v3.index(), 1 );
BOOST_TEST_EQ( get<1>(v3).v, 2 );
@ -228,7 +228,7 @@ int main()
BOOST_TEST_EQ( v3.index(), 0 );
BOOST_TEST_EQ( get<0>(v3).v, 1 );
variant<X1, X2> v4( in_place_index<1>, 3 );
variant<X1, X2> v4( in_place_index_t<1>{}, 3 );
BOOST_TEST_EQ( v4.index(), 1 );
BOOST_TEST_EQ( get<1>(v4).v, 3 );
@ -241,7 +241,7 @@ int main()
BOOST_TEST_EQ( v4.index(), 1 );
BOOST_TEST_EQ( get<1>(v4).v, 2 );
variant<X1, X2> v5( in_place_index<0>, 4 );
variant<X1, X2> v5( in_place_index_t<0>{}, 4 );
BOOST_TEST_EQ( v5.index(), 0 );
BOOST_TEST_EQ( get<0>(v5).v, 4 );

View File

@ -35,47 +35,47 @@ int main()
{
variant<int> v( 1 );
BOOST_TEST_EQ( (visit( []( auto x ){ return x; }, v )), 1 );
BOOST_TEST_EQ( (visit( []( int x ){ return x; }, v )), 1 );
visit( []( auto x ){ BOOST_TEST_EQ( x, 1 ); }, v );
visit( []( auto x ){ BOOST_TEST_EQ( x, 1 ); }, std::move(v) );
visit( []( int x ){ BOOST_TEST_EQ( x, 1 ); }, v );
visit( []( int x ){ BOOST_TEST_EQ( x, 1 ); }, std::move(v) );
}
{
variant<int> const v( 2 );
BOOST_TEST_EQ( (visit( []( auto x ){ return x; }, v )), 2 );
BOOST_TEST_EQ( (visit( []( int x ){ return x; }, v )), 2 );
visit( []( auto x ){ BOOST_TEST_EQ( x, 2 ); }, v );
visit( []( auto x ){ BOOST_TEST_EQ( x, 2 ); }, std::move(v) );
visit( []( int x ){ BOOST_TEST_EQ( x, 2 ); }, v );
visit( []( int x ){ BOOST_TEST_EQ( x, 2 ); }, std::move(v) );
}
{
variant<int const> v( 3 );
BOOST_TEST_EQ( (visit( []( auto x ){ return x; }, v )), 3 );
BOOST_TEST_EQ( (visit( []( int x ){ return x; }, v )), 3 );
visit( []( auto x ){ BOOST_TEST_EQ( x, 3 ); }, v );
visit( []( auto x ){ BOOST_TEST_EQ( x, 3 ); }, std::move(v) );
visit( []( int x ){ BOOST_TEST_EQ( x, 3 ); }, v );
visit( []( int x ){ BOOST_TEST_EQ( x, 3 ); }, std::move(v) );
}
{
variant<int const> const v( 4 );
BOOST_TEST_EQ( (visit( []( auto x ){ return x; }, v )), 4 );
BOOST_TEST_EQ( (visit( []( int x ){ return x; }, v )), 4 );
visit( []( auto x ){ BOOST_TEST_EQ( x, 4 ); }, v );
visit( []( auto x ){ BOOST_TEST_EQ( x, 4 ); }, std::move(v) );
visit( []( int x ){ BOOST_TEST_EQ( x, 4 ); }, v );
visit( []( int x ){ BOOST_TEST_EQ( x, 4 ); }, std::move(v) );
}
{
variant<int, float> v1( 1 );
variant<int, float> const v2( 3.14f );
BOOST_TEST_EQ( (visit( []( auto x1, auto x2 ){ return (int)(x1 * 1000) + (int)(x2 * 100); }, v1, v2 )), 1314 );
BOOST_TEST_EQ( (visit( []( int x1, float x2 ){ return (int)(x1 * 1000) + (int)(x2 * 100); }, v1, v2 )), 1314 );
visit( []( auto x1, auto x2 ){ BOOST_TEST_EQ( x1, 1 ); BOOST_TEST_EQ( x2, 3.14f ); }, v1, v2 );
visit( []( auto x1, auto x2 ){ BOOST_TEST_EQ( x1, 1 ); BOOST_TEST_EQ( x2, 3.14f ); }, std::move(v1), std::move(v2) );
visit( []( int x1, float x2 ){ BOOST_TEST_EQ( x1, 1 ); BOOST_TEST_EQ( x2, 3.14f ); }, v1, v2 );
visit( []( int x1, float x2 ){ BOOST_TEST_EQ( x1, 1 ); BOOST_TEST_EQ( x2, 3.14f ); }, std::move(v1), std::move(v2) );
}
{
@ -83,10 +83,10 @@ int main()
variant<int, float, double> const v2( 3.14f );
variant<int, float, double> v3( 6.28 );
BOOST_TEST_EQ( (visit( []( auto x1, auto x2, auto x3 ){ return (int)(x1 * 100) * 1000000 + (int)(x2 * 100) * 1000 + (int)(x3 * 100); }, v1, v2, v3 )), 100314628 );
BOOST_TEST_EQ( (visit( []( int x1, float x2, double x3 ){ return (int)(x1 * 100) * 1000000 + (int)(x2 * 100) * 1000 + (int)(x3 * 100); }, v1, v2, v3 )), 100314628 );
visit( []( auto x1, auto x2, auto x3 ){ BOOST_TEST_EQ( x1, 1 ); BOOST_TEST_EQ( x2, 3.14f ); BOOST_TEST_EQ( x3, 6.28 ); }, v1, v2, v3 );
visit( []( auto x1, auto x2, auto x3 ){ BOOST_TEST_EQ( x1, 1 ); BOOST_TEST_EQ( x2, 3.14f ); BOOST_TEST_EQ( x3, 6.28 ); }, std::move(v1), std::move(v2), std::move(v3) );
visit( []( int x1, float x2, double x3 ){ BOOST_TEST_EQ( x1, 1 ); BOOST_TEST_EQ( x2, 3.14f ); BOOST_TEST_EQ( x3, 6.28 ); }, v1, v2, v3 );
visit( []( int x1, float x2, double x3 ){ BOOST_TEST_EQ( x1, 1 ); BOOST_TEST_EQ( x2, 3.14f ); BOOST_TEST_EQ( x3, 6.28 ); }, std::move(v1), std::move(v2), std::move(v3) );
}
{
@ -95,10 +95,10 @@ int main()
variant<int, float, double, char> v3( 6.28 );
variant<int, float, double, char> const v4( 'A' );
BOOST_TEST_EQ( (visit( []( auto x1, auto x2, auto x3, auto x4 ){ return (long long)(x1 * 100) * 100000000 + (long long)(x2 * 100) * 100000 + (long long)(x3 * 10000) + (int)x4; }, v1, v2, v3, v4 )), 10031462800 + 'A' );
BOOST_TEST_EQ( (visit( []( int x1, float x2, double x3, char x4 ){ return (long long)(x1 * 100) * 100000000 + (long long)(x2 * 100) * 100000 + (long long)(x3 * 10000) + (int)x4; }, v1, v2, v3, v4 )), 10031462800 + 'A' );
visit( []( auto x1, auto x2, auto x3, auto x4 ){ BOOST_TEST_EQ( x1, 1 ); BOOST_TEST_EQ( x2, 3.14f ); BOOST_TEST_EQ( x3, 6.28 ); BOOST_TEST_EQ( x4, 'A' ); }, v1, v2, v3, v4 );
visit( []( auto x1, auto x2, auto x3, auto x4 ){ BOOST_TEST_EQ( x1, 1 ); BOOST_TEST_EQ( x2, 3.14f ); BOOST_TEST_EQ( x3, 6.28 ); BOOST_TEST_EQ( x4, 'A' ); }, std::move(v1), std::move(v2), std::move(v3), std::move(v4) );
visit( []( int x1, float x2, double x3, char x4 ){ BOOST_TEST_EQ( x1, 1 ); BOOST_TEST_EQ( x2, 3.14f ); BOOST_TEST_EQ( x3, 6.28 ); BOOST_TEST_EQ( x4, 'A' ); }, v1, v2, v3, v4 );
visit( []( int x1, float x2, double x3, char x4 ){ BOOST_TEST_EQ( x1, 1 ); BOOST_TEST_EQ( x2, 3.14f ); BOOST_TEST_EQ( x3, 6.28 ); BOOST_TEST_EQ( x4, 'A' ); }, std::move(v1), std::move(v2), std::move(v3), std::move(v4) );
}
{