34#ifndef _RWSTD_NO_EXT_CXX_0X
44 const char* trait_name,
const char*
type_name,
50 "%s<%s>::value was %b, expected true",
59 "%s evaluated true for %zu traits, expected 1",
64#define _TEST(Trait,Type) \
65 test_trait(__LINE__, #Trait, #Type, \
66 std::is_void<Type>::value \
67 + std::is_integral<Type>::value \
68 + std::is_floating_point<Type>::value \
69 + std::is_array<Type>::value \
70 + std::is_pointer<Type>::value \
71 + std::is_lvalue_reference<Type>::value \
72 + std::is_rvalue_reference<Type>::value \
73 + std::is_member_object_pointer<Type>::value \
74 + std::is_member_function_pointer<Type>::value \
75 + std::is_enum<Type>::value \
76 + std::is_union<Type>::value \
77 + std::is_class<Type>::value \
78 + std::is_function<Type>::value, \
83#define TEST(Trait,Type) \
85 _TEST(Trait, std::add_const<Type>::type); \
86 _TEST(Trait, std::add_volatile<Type>::type); \
87 _TEST(Trait, std::add_cv<Type>::type)
91#define TEST(Trait,Type) \
116static void test_is_void ()
118 TEST(std::is_void,
void);
121static void test_is_integral ()
123 TEST(std::is_integral,
bool);
124 TEST(std::is_integral,
char);
126#ifndef _RWSTD_NO_WCHAR_T
127 TEST(std::is_integral,
wchar_t);
130 TEST(std::is_integral,
signed char);
131 TEST(std::is_integral,
unsigned char);
133 TEST(std::is_integral,
signed short);
134 TEST(std::is_integral,
unsigned short);
136 TEST(std::is_integral,
signed int);
137 TEST(std::is_integral,
unsigned int);
139 TEST(std::is_integral,
signed long);
140 TEST(std::is_integral,
unsigned long);
142#ifndef _RWSTD_NO_LONG_LONG
143 TEST(std::is_integral,
signed long long);
144 TEST(std::is_integral,
unsigned long long);
148static void test_is_floating_point ()
150 TEST(std::is_floating_point,
float);
151 TEST(std::is_floating_point,
double);
152 TEST(std::is_floating_point,
long double);
155static void test_is_array ()
157 TEST(std::is_array,
char []);
158 TEST(std::is_array,
char [10]);
159 TEST(std::is_array,
char [][10]);
160 TEST(std::is_array,
char [10][10]);
163static void test_is_pointer ()
165 TEST(std::is_pointer,
char*
const);
166 TEST(std::is_pointer,
char const*);
167 TEST(std::is_pointer,
const char*);
169 TEST(std::is_pointer,
char*);
170 TEST(std::is_pointer,
char (*)[]);
171 TEST(std::is_pointer,
char (*)());
174static void test_is_lvalue_reference ()
176 TEST(std::is_lvalue_reference,
char&);
178 TEST(std::is_lvalue_reference,
void (&)());
179 TEST(std::is_lvalue_reference,
void (&)(
int));
182 TEST(std::is_lvalue_reference,
long (&)[]);
183 TEST(std::is_lvalue_reference,
long (&)[][10]);
186 TEST(std::is_lvalue_reference,
long (&)[10]);
187 TEST(std::is_lvalue_reference,
long (&)[10][10]);
190static void test_is_rvalue_reference ()
192#ifndef _RWSTD_NO_RVALUE_REFERENCES
193 TEST(std::is_rvalue_reference,
char&&);
196 "test_is_rvalue_reference() disabled because "
197 "_RWSTD_NO_RVALUE_REFERENCES is defined");
201static void test_is_member_object_pointer ()
203 TEST (std::is_member_object_pointer,
long (
class_t::*));
204 TEST (std::is_member_object_pointer,
long (
struct_t::*));
205 TEST (std::is_member_object_pointer,
long (
union_t::*));
208static void test_is_member_function_pointer ()
211 TEST (std::is_member_function_pointer,
long (
class_t:: *)());
212 TEST (std::is_member_function_pointer,
long (
struct_t::*)());
213 TEST (std::is_member_function_pointer,
long (
union_t:: *)());
216 TEST (std::is_member_function_pointer,
long (
class_t:: *)(int));
217 TEST (std::is_member_function_pointer,
long (
struct_t::*)(int));
218 TEST (std::is_member_function_pointer,
long (
union_t:: *)(int));
221 TEST (std::is_member_function_pointer,
222 long (
class_t:: *)(int, char));
223 TEST (std::is_member_function_pointer,
225 TEST (std::is_member_function_pointer,
226 long (
union_t:: *)(int, char));
229 TEST (std::is_member_function_pointer,
230 long (
class_t:: *)(char, short, int, long, float, double,
231 char, short, int, long, float, double));
232 TEST (std::is_member_function_pointer,
233 long (
struct_t::*)(char, short, int, long, float, double,
234 char, short, int, long, float, double));
235 TEST (std::is_member_function_pointer,
236 long (
union_t:: *)(char, short, int, long, float, double,
237 char, short, int, long, float, double));
240static void test_is_enum ()
245static void test_is_union ()
247#if !defined (_RWSTD_TT_IS_CLASS) && !defined (_RWSTD_TT_IS_UNION)
250 "test_is_union() disabled because neither of "
251 "_RWSTD_TT_IS_CLASS or _RWSTD_TT_IS_UNION is "
259static void test_is_class ()
265static void test_is_function ()
267 TEST (std::is_function,
void ());
268 TEST (std::is_function,
long (
int));
269 TEST (std::is_function,
long (
int,
char));
270 TEST (std::is_function,
long (
int,
char));
280 test_is_floating_point ();
283 test_is_lvalue_reference ();
284 test_is_rvalue_reference ();
285 test_is_member_object_pointer ();
286 test_is_member_function_pointer ();
304 "test disabled because _RWSTD_NO_EXT_CXX_0X is defined");
312int main (
int argc,
char *argv[])
314 return rw_test (argc, argv, __FILE__,
void count(T, T, const U &,...)
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
_TEST_EXPORT int rw_test(int argc, char *argv[], const char *filename, const char *clause, const char *comment, int(*testfun)(int, char **), const char *optspec,...)
_TEST_EXPORT int rw_assert(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_warn(int, const char *, int, const char *,...)