]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/phoenix/test/bll_compatibility/is_instance_of_test.cpp
1 // is_instance_of_test.cpp -- The Boost Lambda Library ------------------
3 // Copyright (C) 2000-2003 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
4 // Copyright (C) 2000-2003 Gary Powell (powellg@amazon.com)
6 // Distributed under the Boost Software License, Version 1.0. (See
7 // accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
10 // For more information, see www.boost.org
12 // -----------------------------------------------------------------------
15 #include <boost/test/minimal.hpp> // see "Header Implementation Option"
18 #include "boost/lambda/detail/is_instance_of.hpp"
22 template <class T1
> struct A1
{};
23 template <class T1
, class T2
> struct A2
{};
24 template <class T1
, class T2
, class T3
> struct A3
{};
25 template <class T1
, class T2
, class T3
, class T4
> struct A4
{};
27 class B1
: public A1
<int> {};
28 class B2
: public A2
<int,int> {};
29 class B3
: public A3
<int,int,int> {};
30 class B4
: public A4
<int,int,int,int> {};
32 // classes that are convertible to classes that derive from A instances
33 // This is not enough to make the test succeed
35 class C1
{ public: operator A1
<int>() { return A1
<int>(); } };
36 class C2
{ public: operator B2() { return B2(); } };
37 class C3
{ public: operator B3() { return B3(); } };
38 class C4
{ public: operator B4() { return B4(); } };
40 // test that the result is really a constant
41 // (in an alternative implementation, gcc 3.0.2. claimed that it was
43 template <bool b
> class X
{};
44 // this should compile
45 X
<boost::lambda::is_instance_of_2
<int, A2
>::value
> x
;
48 int test_main(int, char *[]) {
50 using boost::lambda::is_instance_of_1
;
51 using boost::lambda::is_instance_of_2
;
52 using boost::lambda::is_instance_of_3
;
53 using boost::lambda::is_instance_of_4
;
56 BOOST_CHECK((is_instance_of_1
<B1
, A1
>::value
== true));
57 BOOST_CHECK((is_instance_of_1
<A1
<float>, A1
>::value
== true));
58 BOOST_CHECK((is_instance_of_1
<int, A1
>::value
== false));
59 BOOST_CHECK((is_instance_of_1
<C1
, A1
>::value
== false));
61 BOOST_CHECK((is_instance_of_2
<B2
, A2
>::value
== true));
62 BOOST_CHECK((is_instance_of_2
<A2
<int, float>, A2
>::value
== true));
63 BOOST_CHECK((is_instance_of_2
<int, A2
>::value
== false));
64 BOOST_CHECK((is_instance_of_2
<C2
, A2
>::value
== false));
66 BOOST_CHECK((is_instance_of_3
<B3
, A3
>::value
== true));
67 BOOST_CHECK((is_instance_of_3
<A3
<int, float, char>, A3
>::value
== true));
68 BOOST_CHECK((is_instance_of_3
<int, A3
>::value
== false));
69 BOOST_CHECK((is_instance_of_3
<C3
, A3
>::value
== false));
71 BOOST_CHECK((is_instance_of_4
<B4
, A4
>::value
== true));
72 BOOST_CHECK((is_instance_of_4
<A4
<int, float, char, double>, A4
>::value
== true));
73 BOOST_CHECK((is_instance_of_4
<int, A4
>::value
== false));
74 BOOST_CHECK((is_instance_of_4
<C4
, A4
>::value
== false));