1 | |
---|
2 | // (C) Copyright John Maddock 2002. |
---|
3 | // Use, modification and distribution are subject to the |
---|
4 | // Boost Software License, Version 1.0. (See accompanying file |
---|
5 | // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
---|
6 | |
---|
7 | #include "test.hpp" |
---|
8 | #include "check_integral_constant.hpp" |
---|
9 | #ifdef TEST_STD |
---|
10 | # include <type_traits> |
---|
11 | #else |
---|
12 | # include <boost/type_traits/is_function.hpp> |
---|
13 | # include <boost/type_traits/is_float.hpp> |
---|
14 | # include <boost/type_traits/is_enum.hpp> |
---|
15 | # include <boost/type_traits/is_class.hpp> |
---|
16 | # include <boost/type_traits/is_scalar.hpp> |
---|
17 | # include <boost/type_traits/is_pod.hpp> |
---|
18 | # include <boost/type_traits/has_trivial_constructor.hpp> |
---|
19 | # include <boost/type_traits/has_trivial_copy.hpp> |
---|
20 | # include <boost/type_traits/has_trivial_assign.hpp> |
---|
21 | # include <boost/type_traits/has_trivial_destructor.hpp> |
---|
22 | # include <boost/type_traits/is_compound.hpp> |
---|
23 | # include <boost/type_traits/is_base_of.hpp> |
---|
24 | # include <boost/type_traits/is_convertible.hpp> |
---|
25 | #endif |
---|
26 | |
---|
27 | TT_TEST_BEGIN(tricky_function_type_test) |
---|
28 | |
---|
29 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_function<const int&>::value, false); |
---|
30 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_function<int (&)(int)>::value, false); |
---|
31 | |
---|
32 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_class<foo0_t>::value, false); |
---|
33 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_enum<foo0_t>::value, false); |
---|
34 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_scalar<foo0_t>::value, false); |
---|
35 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_class<foo0_t>::value, false); |
---|
36 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_compound<foo0_t>::value, true); |
---|
37 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_pod<foo0_t>::value, false); |
---|
38 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_constructor<foo0_t>::value, false); |
---|
39 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_copy<foo0_t>::value, false); |
---|
40 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_assign<foo0_t>::value, false); |
---|
41 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_destructor<foo0_t>::value, false); |
---|
42 | BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_base_of<foo0_t, foo0_t>::value), true); // TR1 required behaviour (new to 1.34) |
---|
43 | BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_convertible<foo0_t, int>::value), false); |
---|
44 | |
---|
45 | |
---|
46 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_class<foo1_t>::value, false); |
---|
47 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_enum<foo1_t>::value, false); |
---|
48 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_scalar<foo1_t>::value, false); |
---|
49 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_compound<foo1_t>::value, true); |
---|
50 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_pod<foo1_t>::value, false); |
---|
51 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_constructor<foo1_t>::value, false); |
---|
52 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_copy<foo1_t>::value, false); |
---|
53 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_assign<foo1_t>::value, false); |
---|
54 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_destructor<foo1_t>::value, false); |
---|
55 | |
---|
56 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_class<foo2_t>::value, false); |
---|
57 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_enum<foo2_t>::value, false); |
---|
58 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_scalar<foo2_t>::value, false); |
---|
59 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_compound<foo2_t>::value, true); |
---|
60 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_pod<foo2_t>::value, false); |
---|
61 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_constructor<foo2_t>::value, false); |
---|
62 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_copy<foo2_t>::value, false); |
---|
63 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_assign<foo2_t>::value, false); |
---|
64 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_destructor<foo2_t>::value, false); |
---|
65 | |
---|
66 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_class<foo3_t>::value, false); |
---|
67 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_enum<foo3_t>::value, false); |
---|
68 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_scalar<foo3_t>::value, false); |
---|
69 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_compound<foo3_t>::value, true); |
---|
70 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_pod<foo3_t>::value, false); |
---|
71 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_constructor<foo3_t>::value, false); |
---|
72 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_copy<foo3_t>::value, false); |
---|
73 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_assign<foo3_t>::value, false); |
---|
74 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_destructor<foo3_t>::value, false); |
---|
75 | |
---|
76 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_class<foo4_t>::value, false); |
---|
77 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_enum<foo4_t>::value, false); |
---|
78 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_scalar<foo4_t>::value, false); |
---|
79 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_compound<foo4_t>::value, true); |
---|
80 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_pod<foo4_t>::value, false); |
---|
81 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_constructor<foo4_t>::value, false); |
---|
82 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_copy<foo4_t>::value, false); |
---|
83 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_assign<foo4_t>::value, false); |
---|
84 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_destructor<foo4_t>::value, false); |
---|
85 | |
---|
86 | typedef void foo5_t(int, bool, int*, int[], int, int, int, int, int ...); |
---|
87 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_function<foo5_t>::value, true); |
---|
88 | |
---|
89 | typedef void (test_abc1::*vproc1)(...); |
---|
90 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_member_function_pointer<vproc1>::value, true); |
---|
91 | typedef void (test_abc1::*vproc2)(int, char, long, ...); |
---|
92 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_member_function_pointer<vproc2>::value, true); |
---|
93 | typedef void (test_abc1::*vproc3)(int, char, long, long, ...)const; |
---|
94 | BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_member_function_pointer<vproc3>::value, true); |
---|
95 | |
---|
96 | TT_TEST_END |
---|
97 | |
---|
98 | |
---|
99 | |
---|
100 | |
---|
101 | |
---|
102 | |
---|
103 | |
---|
104 | |
---|