]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/phoenix/test/bll_compatibility/is_instance_of_test.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / phoenix / test / bll_compatibility / is_instance_of_test.cpp
1 // is_instance_of_test.cpp -- The Boost Lambda Library ------------------
2 //
3 // Copyright (C) 2000-2003 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
4 // Copyright (C) 2000-2003 Gary Powell (powellg@amazon.com)
5 //
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)
9 //
10 // For more information, see www.boost.org
11
12 // -----------------------------------------------------------------------
13
14
15 #include <boost/test/minimal.hpp> // see "Header Implementation Option"
16
17
18 #include "boost/lambda/detail/is_instance_of.hpp"
19
20 #include <iostream>
21
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 {};
26
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> {};
31
32 // classes that are convertible to classes that derive from A instances
33 // This is not enough to make the test succeed
34
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(); } };
39
40 // test that the result is really a constant
41 // (in an alternative implementation, gcc 3.0.2. claimed that it was
42 // a non-constant)
43 template <bool b> class X {};
44 // this should compile
45 X<boost::lambda::is_instance_of_2<int, A2>::value> x;
46
47
48 int test_main(int, char *[]) {
49
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;
54
55
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));
60
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));
65
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));
70
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));
75
76 return 0;
77
78 }
79