]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/tr1/test/test_type_traits.cpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / tr1 / test / test_type_traits.cpp
CommitLineData
7c673cae
FG
1// (C) Copyright John Maddock 2005.
2// Use, modification and distribution are subject to the
3// Boost Software License, Version 1.0. (See accompanying file
4// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6#ifdef TEST_STD_HEADERS
7#include <type_traits>
8#else
9#include <boost/tr1/type_traits.hpp>
10#endif
11
12#include <boost/static_assert.hpp>
13#include <boost/type_traits/is_same.hpp>
14#include <boost/type_traits/is_base_and_derived.hpp>
15
16template <class T>
17void check_value_trait(const T&)
18{
19 T t;
20 (void)t;
21 typedef typename T::type type;
22 typedef typename T::value_type value_type;
23
24 BOOST_STATIC_ASSERT((::boost::is_base_and_derived<
25 std::tr1::integral_constant<value_type, T::value>, T>::value));
26 BOOST_STATIC_ASSERT((::boost::is_same<
27 std::tr1::integral_constant<value_type, T::value>, type>::value));
28}
29
30template <class T>
31void check_transform_trait(const T* p)
32{
33 typedef typename T::type type;
34}
35
36struct UDT{};
37union union_type{ char c; int i; };
38enum enum_type{ one, two };
39
40#define check_unary_trait(trait)\
41 check_value_trait(std::tr1::trait<void>());\
42 check_value_trait(std::tr1::trait<int>());\
43 check_value_trait(std::tr1::trait<float>());\
44 check_value_trait(std::tr1::trait<UDT>());\
45 /*check_value_trait(std::tr1::trait<union_type>());*/\
46 check_value_trait(std::tr1::trait<enum_type>());\
47 check_value_trait(std::tr1::trait<void *>());\
48 check_value_trait(std::tr1::trait<UDT&>());\
49 check_value_trait(std::tr1::trait<int (void)>());\
50 check_value_trait(std::tr1::trait<int (&)(void)>());\
51 check_value_trait(std::tr1::trait<int (*)(void)>());\
52 check_value_trait(std::tr1::trait<int (UDT::*)(void)>());\
53 check_value_trait(std::tr1::trait<int (UDT::*)>());\
54 check_value_trait(std::tr1::trait<int[4]>());\
55 check_value_trait(std::tr1::trait<int[]>());
56
57#define check_binary_trait(trait)\
58 check_value_trait(std::tr1::trait<void, int>());\
59 check_value_trait(std::tr1::trait<int, double>());\
60 check_value_trait(std::tr1::trait<float, float>());\
61 check_value_trait(std::tr1::trait<UDT, UDT&>());\
62 /*check_value_trait(std::tr1::trait<union_type>());*/\
63 check_value_trait(std::tr1::trait<enum_type, enum_type>());\
64 check_value_trait(std::tr1::trait<void *, const void*>());\
65 check_value_trait(std::tr1::trait<UDT&, int>());\
66 check_value_trait(std::tr1::trait<int (void), int (void)>());\
67 check_value_trait(std::tr1::trait<int (&)(void), int (void)>());\
68 check_value_trait(std::tr1::trait<int (*)(void), int (void)>());\
69 check_value_trait(std::tr1::trait<int (UDT::*)(void), int (void)>());\
70 check_value_trait(std::tr1::trait<int (UDT::*), int (UDT::*)>());\
71 check_value_trait(std::tr1::trait<int[4], int[3]>());\
72 check_value_trait(std::tr1::trait<int[4], int[4]>());
73
74#define check_transform(trait)\
75 check_transform_trait((std::tr1::trait<void>*)(0));\
76 check_transform_trait((std::tr1::trait<int>*)(0));\
77 check_transform_trait((std::tr1::trait<float>*)(0));\
78 check_transform_trait((std::tr1::trait<UDT>*)(0));\
79 check_transform_trait((std::tr1::trait<enum_type>*)(0));\
80 check_transform_trait((std::tr1::trait<void *>*)(0));\
81 check_transform_trait((std::tr1::trait<UDT&>*)(0));\
82 check_transform_trait((std::tr1::trait<int (void)>*)(0));\
83 check_transform_trait((std::tr1::trait<int (&)(void)>*)(0));\
84 check_transform_trait((std::tr1::trait<int (*)(void)>*)(0));\
85 check_transform_trait((std::tr1::trait<int (UDT::*)(void)>*)(0));\
86 check_transform_trait((std::tr1::trait<int (UDT::*)>*)(0));\
87 check_transform_trait((std::tr1::trait<int[4]>*)(0));
88
89int main()
90{
91 check_unary_trait(is_void);
92 check_unary_trait(is_integral);
93 check_unary_trait(is_floating_point);
94 check_unary_trait(is_array);
95 check_unary_trait(is_pointer);
96 check_unary_trait(is_reference);
97 check_unary_trait(is_member_object_pointer);
98 check_unary_trait(is_member_function_pointer);
99 check_unary_trait(is_enum);
100 check_unary_trait(is_union);
101 check_unary_trait(is_class);
102 check_unary_trait(is_function);
103 check_unary_trait(is_arithmetic);
104 check_unary_trait(is_fundamental);
105 check_unary_trait(is_object);
106 check_unary_trait(is_scalar);
107 check_unary_trait(is_compound);
108 check_unary_trait(is_member_pointer);
109 check_unary_trait(is_const);
110 check_unary_trait(is_volatile);
111 check_unary_trait(is_pod);
112 check_unary_trait(is_empty);
113 check_unary_trait(is_polymorphic);
114 check_unary_trait(is_abstract);
115 check_unary_trait(has_trivial_constructor);
116 check_unary_trait(has_trivial_copy);
117 check_unary_trait(has_trivial_assign);
118 check_unary_trait(has_trivial_destructor);
119 check_unary_trait(has_nothrow_constructor);
120 check_unary_trait(has_nothrow_copy);
121 check_unary_trait(has_nothrow_assign);
122 check_unary_trait(has_virtual_destructor);
123 check_unary_trait(is_signed);
124 check_unary_trait(is_unsigned);
125
126 check_value_trait(std::tr1::alignment_of<int>());
127 check_value_trait(std::tr1::alignment_of<UDT>());
128 check_value_trait(std::tr1::alignment_of<int[4]>());
129
130 check_unary_trait(rank);
131 check_unary_trait(extent);
132
133 check_binary_trait(is_same);
134 check_binary_trait(is_base_of);
135 check_binary_trait(is_convertible);
136
137 check_transform(remove_const);
138 check_transform(remove_volatile);
139 check_transform(remove_cv);
140 check_transform(add_const);
141 check_transform(add_volatile);
142 check_transform(add_cv);
143 check_transform(remove_reference);
144 check_transform(add_reference);
145 check_transform(remove_extent);
146 check_transform(remove_all_extents);
147 check_transform(remove_pointer);
148 check_transform(add_pointer);
149 check_transform_trait((::std::tr1::aligned_storage<1,1>*)(0));
150 check_transform_trait((::std::tr1::aligned_storage<4,1>*)(0));
151 check_transform_trait((::std::tr1::aligned_storage<2,2>*)(0));
152 check_transform_trait((::std::tr1::aligned_storage<4,2>*)(0));
153 check_transform_trait((::std::tr1::aligned_storage<4,4>*)(0));
154 check_transform_trait((::std::tr1::aligned_storage<4,4>*)(0));
155 check_transform_trait((::std::tr1::aligned_storage<8,8>*)(0));
156
157 return 0;
158}
159