]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/variant/test/variant_reference_test.cpp
1 //-----------------------------------------------------------------------------
2 // boost-libs variant/test/variant_reference_test.cpp source file
3 // See http://www.boost.org for updates, documentation, and revision history.
4 //-----------------------------------------------------------------------------
7 // Eric Friedman, Itay Maman
9 // Distributed under the Boost Software License, Version 1.0. (See
10 // accompanying file LICENSE_1_0.txt or copy at
11 // http://www.boost.org/LICENSE_1_0.txt)
13 #include "boost/variant.hpp"
14 #include "boost/test/minimal.hpp"
16 #include "boost/mpl/bool.hpp"
17 #include "boost/type_traits/add_reference.hpp"
18 #include "boost/type_traits/is_pointer.hpp"
21 // support types and functions
24 struct derived_t
: base_t
{ };
26 template <typename Base
, typename Derived
>
27 bool check_base_derived(Base
* b
, Derived
* d
, long)
32 template <typename Base
, typename Derived
>
33 bool check_base_derived(Base
& b
, Derived
& d
, int)
39 typename
boost::add_reference
<T
>::type
40 wknd_get(boost::variant
<T
&>& var
, long)
42 return boost::get
<T
>(var
);
46 typename
boost::add_reference
<T
>::type
47 wknd_get(boost::variant
<T
>& var
, int)
49 return boost::get
<T
>(var
);
56 void test_reference_content(T
& t
, const T
& value1
, const T
& value2
)
58 BOOST_CHECK( !(value1
== value2
) );
62 boost::variant
< T
& > var(t
);
63 BOOST_CHECK(( boost::get
<T
>(&var
) == &t
));
66 BOOST_CHECK(( boost::get
<T
>(var
) == value1
));
70 boost::variant
< T
> var2(var
);
71 BOOST_CHECK(( boost::get
<T
>(var2
) == value1
));
74 BOOST_CHECK(( boost::get
<T
>(var2
) == value1
));
77 template <typename Base
, typename Derived
>
78 void base_derived_test(Derived d
)
81 BOOST_CHECK((check_base_derived(
87 boost::variant
<Base
> base_var(d
);
88 BOOST_CHECK((check_base_derived(
89 wknd_get(base_var
, 1L)
94 boost::variant
<Derived
> derived_var(d
);
95 boost::variant
<Base
> base_from_derived_var(derived_var
);
96 BOOST_CHECK((check_base_derived(
97 wknd_get(base_from_derived_var
, 1L)
98 , wknd_get(derived_var
, 1L)
103 int test_main(int , char* [])
106 test_reference_content(i
, 1, 2);
111 base_derived_test
< int&,int >(i
);
112 base_derived_test
< base_t
*,derived_t
* >(&d
);
113 base_derived_test
< base_t
&,derived_t
& >(d
);
115 return boost::exit_success
;