36#ifndef _RWSTD_NO_EXT_CXX_0X
103 const char* trait,
const char* typeT,
const char* typeU)
106 "%s<%s, %s>::type is%{?}n't%{;} %b as expected",
107 trait, typeT, typeU,
value != expect, expect);
110#define TEST(Trait,TypeT,TypeU,Expect) \
111 { const bool value = Trait< TypeT, TypeU >::value; \
112 test_trait (__LINE__, value, Expect, #Trait, #TypeT, #TypeU); \
113 } typedef void __dummy
117 TEST (std::is_same,
bool,
bool,
true);
118 TEST (std::is_same,
char,
char,
true);
119 TEST (std::is_same,
short,
short,
true);
120 TEST (std::is_same,
int,
int,
true);
121 TEST (std::is_same,
long,
long,
true);
122 TEST (std::is_same,
float,
float,
true);
123 TEST (std::is_same,
double,
double,
true);
131 TEST (std::is_same, derived_A, derived_A,
true);
136 TEST (std::is_same, derived_B, derived_B,
true);
139 TEST (std::is_same,
signed char,
char,
false);
140 TEST (std::is_same,
char,
signed char,
false);
141 TEST (std::is_same,
unsigned char,
char,
false);
142 TEST (std::is_same,
char,
unsigned char,
false);
144 TEST (std::is_same,
signed char,
unsigned char,
false);
145 TEST (std::is_same,
unsigned char,
signed char,
false);
146 TEST (std::is_same,
signed short,
unsigned short,
false);
147 TEST (std::is_same,
unsigned short,
signed short,
false);
148 TEST (std::is_same,
signed int,
unsigned int,
false);
149 TEST (std::is_same,
unsigned int,
signed int,
false);
150 TEST (std::is_same,
signed long,
unsigned long,
false);
151 TEST (std::is_same,
unsigned long,
signed long,
false);
153 TEST (std::is_same,
long,
const long,
false);
154 TEST (std::is_same,
const long,
long,
false);
156 TEST (std::is_same,
long,
volatile long,
false);
157 TEST (std::is_same,
volatile long,
long,
false);
159 TEST (std::is_same,
long,
const volatile long,
false);
160 TEST (std::is_same,
const volatile long,
long,
false);
167 TEST (std::is_same,
enum_A,
unsigned char,
false);
168 TEST (std::is_same,
enum_A,
unsigned short,
false);
169 TEST (std::is_same,
enum_A,
unsigned int,
false);
170 TEST (std::is_same,
enum_A,
unsigned long,
false);
175 TEST (std::is_same,
int[],
int*,
false);
176 TEST (std::is_same,
int*,
int[],
false);
179#define TEST(Trait,TypeT,TypeU,Expect) \
180 { const bool value = Trait< TypeT, TypeU >::value; \
181 test_trait (__LINE__, value, Expect, #Trait, #TypeT, #TypeU); \
182 } typedef void __dummy
184static void test_is_base_of ()
186 TEST (std::is_base_of,
bool,
bool,
false);
187 TEST (std::is_base_of,
char,
char,
false);
188 TEST (std::is_base_of,
short,
short,
false);
189 TEST (std::is_base_of,
int,
int,
false);
190 TEST (std::is_base_of,
long,
long,
false);
191 TEST (std::is_base_of,
float,
float,
false);
192 TEST (std::is_base_of,
double,
double,
false);
205#if defined (_RWSTD_TT_IS_BASE_OF) \
206 || defined (_RWSTD_TT_IS_CLASS) \
207 || defined (_RWSTD_TT_IS_UNION)
213 "portions of test_is_base_of() have been disabled due "
214 "to lack of compiler support.");
221#if defined (__SUNPRO_CC) && (__SUNPRO_CC <= 0x590)
226 "unable to detect private or protected base classes.");
252 TEST (std::is_base_of,
signed char,
char,
false);
253 TEST (std::is_base_of,
char,
signed char,
false);
254 TEST (std::is_base_of,
unsigned char,
char,
false);
255 TEST (std::is_base_of,
char,
unsigned char,
false);
257 TEST (std::is_base_of,
signed char,
unsigned char,
false);
258 TEST (std::is_base_of,
unsigned char,
signed char,
false);
259 TEST (std::is_base_of,
signed short,
unsigned short,
false);
260 TEST (std::is_base_of,
unsigned short,
signed short,
false);
261 TEST (std::is_base_of,
signed int,
unsigned int,
false);
262 TEST (std::is_base_of,
unsigned int,
signed int,
false);
263 TEST (std::is_base_of,
signed long,
unsigned long,
false);
264 TEST (std::is_base_of,
unsigned long,
signed long,
false);
271 TEST (std::is_base_of,
enum_A,
unsigned char,
false);
272 TEST (std::is_base_of,
enum_A,
unsigned short,
false);
273 TEST (std::is_base_of,
enum_A,
unsigned int,
false);
274 TEST (std::is_base_of,
enum_A,
unsigned long,
false);
276 TEST (std::is_base_of,
int[],
int*,
false);
277 TEST (std::is_base_of,
int*,
int[],
false);
286static void test_is_convertible ()
310 TEST (std::is_convertible,
int*,
int*,
true);
311 TEST (std::is_convertible,
const int*,
const int*,
true);
312 TEST (std::is_convertible,
volatile int*,
volatile int*,
true);
313 TEST (std::is_convertible,
const volatile int*,
const volatile int*,
true);
316 TEST (std::is_convertible,
int*,
const int*,
true);
317 TEST (std::is_convertible,
int*,
volatile int*,
true);
318 TEST (std::is_convertible,
int*,
const volatile int*,
true);
321 TEST (std::is_convertible,
const int*,
int*,
false);
322 TEST (std::is_convertible,
volatile int*,
int*,
false);
323 TEST (std::is_convertible,
const volatile int*,
int*,
false);
329 TEST (std::is_convertible,
void,
void,
true);
330 TEST (std::is_convertible,
void,
long,
false);
331 TEST (std::is_convertible,
long,
void,
false);
337 TEST (std::is_convertible,
int[],
int*,
true);
338 TEST (std::is_convertible,
const int[],
const int*,
true);
339 TEST (std::is_convertible,
volatile int[],
volatile int*,
true);
340 TEST (std::is_convertible,
const volatile int[],
const volatile int*,
true);
343 TEST (std::is_convertible,
int[],
const int*,
true);
344 TEST (std::is_convertible,
int[],
volatile int*,
true);
345 TEST (std::is_convertible,
int[],
const volatile int*,
true);
348 TEST (std::is_convertible,
const int[],
int*,
false);
349 TEST (std::is_convertible,
volatile int[],
int*,
false);
350 TEST (std::is_convertible,
const volatile int[],
int*,
false);
356 TEST (std::is_convertible,
int*,
int[],
false);
357 TEST (std::is_convertible,
const int*,
const int[],
false);
358 TEST (std::is_convertible,
volatile int*,
volatile int[],
false);
359 TEST (std::is_convertible,
const volatile int*,
const volatile int[],
false);
362 TEST (std::is_convertible,
int*,
const int[],
false);
363 TEST (std::is_convertible,
int*,
volatile int[],
false);
364 TEST (std::is_convertible,
int*,
const volatile int[],
false);
367 TEST (std::is_convertible,
const int*,
int[],
false);
368 TEST (std::is_convertible,
volatile int*,
int[],
false);
369 TEST (std::is_convertible,
const volatile int*,
int[],
false);
375 TEST (std::is_convertible,
long*,
void*,
true);
376 TEST (std::is_convertible,
void*,
long*,
false);
379 TEST (std::is_convertible,
int (),
int (),
false);
380 TEST (std::is_convertible,
int (),
int (
char,
long),
false);
383 TEST (std::is_convertible,
int (),
int (*)(),
true);
384 TEST (std::is_convertible,
int (
char,
long),
int (*)(
char,
long),
true);
385 TEST (std::is_convertible,
int (),
int (*)(
char),
false);
388 TEST (std::is_convertible,
int (),
int (&)(),
true);
389 TEST (std::is_convertible,
int (
char,
long),
int (&)(
char,
long),
true);
390 TEST (std::is_convertible,
int (),
int (&)(
char),
false);
392 TEST (std::is_convertible,
int*,
void*,
true);
394#if defined (_MSC_VER) || defined (__IBMCPP__)
397 TEST (std::is_convertible,
int (*)(),
void*,
true);
399 TEST (std::is_convertible,
int (*)(),
void*,
false);
402 TEST (std::is_convertible,
406 TEST (std::is_convertible,
412 TEST (std::is_convertible,
418 TEST (std::is_convertible,
422 TEST (std::is_convertible,
int,
double,
true);
423 TEST (std::is_convertible,
const int,
double,
true);
432 test_is_convertible ();
446 "test disabled because _RWSTD_NO_EXT_CXX_0X is defined");
454int main (
int argc,
char *argv[])
456 return rw_test (argc, argv, __FILE__,
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 *,...)
constructible_from_B(class_B)
derived_with_conversion_t(const T &)