]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/variant2/test/variant_visit_r.cpp
2 // Copyright 2017 Peter Dimov.
4 // Distributed under the Boost Software License, Version 1.0.
6 // See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt
10 # pragma warning( disable: 4244 ) // conversion from float to int, possible loss of data
13 #include <boost/variant2/variant.hpp>
14 #include <boost/core/lightweight_test.hpp>
16 using namespace boost::variant2
;
20 template<class T1
> T1
operator()( T1 t1
) const
28 template<class T1
, class T2
> auto operator()( T1 t1
, T2 t2
) const -> decltype( t1
+ t2
)
36 template<class T1
, class T2
, class T3
> auto operator()( T1 t1
, T2 t2
, T3 t3
) const -> decltype( t1
+ t2
+ t3
)
44 template<class T1
, class T2
, class T3
, class T4
> auto operator()( T1 t1
, T2 t2
, T3 t3
, T4 t4
) const -> decltype( t1
+ t2
+ t3
+ t4
)
46 return t1
+ t2
+ t3
+ t4
;
53 BOOST_TEST_EQ( (visit
<int>( []{ return 3.14f
; } )), 3 );
57 variant
<int, float> v( 1 );
59 BOOST_TEST_EQ( visit
<int>( F1(), v
), 1 );
60 BOOST_TEST_EQ( visit
<float>( F1(), v
), 1.0f
);
64 variant
<int, float> const v( 3.14f
);
66 BOOST_TEST_EQ( visit
<int>( F1(), v
), 3 );
67 BOOST_TEST_EQ( visit
<float>( F1(), v
), 3.14f
);
71 variant
<int, float> v1( 1 );
72 variant
<int, float> const v2( 3.14f
);
74 BOOST_TEST_EQ( visit
<int>( F2(), v1
, v2
), 4 );
75 BOOST_TEST_EQ( visit
<float>( F2(), v1
, v2
), 1 + 3.14f
);
79 variant
<int, float, double> v1( 1 );
80 variant
<int, float, double> const v2( 3.14f
);
81 variant
<int, float, double> v3( 6.28 );
83 BOOST_TEST_EQ( visit
<int>( F3(), v1
, v2
, v3
), 10 );
84 BOOST_TEST_EQ( visit
<float>( F3(), v1
, v2
, v3
), static_cast<float>( 1 + 3.14f
+ 6.28 ) );
88 variant
<int, float, double, char> v1( 1 );
89 variant
<int, float, double, char> const v2( 3.14f
);
90 variant
<int, float, double, char> v3( 6.28 );
91 variant
<int, float, double, char> const v4( 'A' );
93 BOOST_TEST_EQ( visit
<int>( F4(), v1
, v2
, v3
, v4
), 10 + 'A' );
94 BOOST_TEST_EQ( visit
<float>( F4(), v1
, v2
, v3
, v4
), static_cast<float>( 1 + 3.14f
+ 6.28 + 'A' ) );
97 return boost::report_errors();