Ne.app NeANT
The Ne.app NeANT User module of the NeANT distribution.
20.meta.trans.ptr.cpp
Go to the documentation of this file.
1// -*- C++ -*-
2
30#include <rw_driver.h>
31#include <rw/_defs.h>
32
33// compile out all test code if extensions disabled
34#ifndef _RWSTD_NO_EXT_CXX_0X
35
36#include <type_traits>
37
38
40class class_t;
41
42
44void test_trait (int line, const char* trait,
45 const char* typeT, const char* typeU,
46 bool success)
47{
48 rw_assert (success, 0, line,
49 "%s<%s>::type is %{?}exactly%{:}not%{;} %s",
50 trait, typeT, success, typeU);
51}
52
53#define TEST(Trait,TypeT,TypeU) \
54 test_trait(__LINE__, #Trait, #TypeT, #TypeU, \
55 std::is_same<Trait<TypeT>::type, TypeU>::value)
56
57
59static void test_add_pointer ()
60{
61 TEST (std::add_pointer, int, int*);
62 TEST (std::add_pointer, int&, int*);
63
64 TEST (std::add_pointer, int*, int**);
65 TEST (std::add_pointer, int const [], int const (*)[]);
66
67 TEST (std::add_pointer, int const * volatile,
68 int const * volatile *);
69
70 TEST (std::add_pointer, int const * volatile &,
71 int const * volatile *);
72
73 TEST (std::add_pointer, int (), int (*)());
74 TEST (std::add_pointer, int (&)(), int (*)());
75 TEST (std::add_pointer, int (*)(), int (**)());
76
77 TEST (std::add_pointer, int (class_t::*), int (class_t::**));
78 TEST (std::add_pointer, int (class_t::*)(), int (class_t::**)());
79
80}
81
82static void test_remove_pointer ()
83{
84 TEST (std::remove_pointer, int*, int);
85 TEST (std::remove_pointer, int**, int*);
86 TEST (std::remove_pointer, int const (*)[], int const []);
87
88 TEST (std::remove_pointer, int const * volatile *,
89 int const * volatile);
90
91 TEST (std::remove_pointer, int const * volatile,
92 int const * volatile);
93
94 TEST (std::remove_pointer, int (), int ());
95 TEST (std::remove_pointer, int (*)(), int ());
96 TEST (std::remove_pointer, int (**)(), int (*)());
97
98 TEST (std::remove_pointer, int (class_t::*), int (class_t::*));
99 TEST (std::remove_pointer, int (class_t::*)(), int (class_t::*)());
100}
101
102
104static int run_test (int, char*[])
105{
106 test_add_pointer ();
107 test_remove_pointer ();
108
109 return 0;
110}
111
112
114#else // _RWSTD_NO_EXT_CXX_0X
115
116
118static int run_test (int, char*[])
119{
120 rw_warn (0, 0, __LINE__,
121 "test disabled because _RWSTD_NO_EXT_CXX_0X is defined");
122 return 0;
123}
124
125#endif // !_RWSTD_NO_EXT_CXX_0X
126
127
129int main (int argc, char *argv[])
130{
131 return rw_test (argc, argv, __FILE__,
132 "meta.trans.ptr",
133 0 /* no comment */,
134 run_test,
135 0);
136}
#define line
Definition 17.names.cpp:490
void test_trait(int line, const char *trait, const char *typeT, const char *typeU, bool success)
#define TEST(Trait, TypeT, TypeU)
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
#define main
_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 *,...)
Definition driver.cpp:1630
_TEST_EXPORT int rw_warn(int, const char *, int, const char *,...)
Definition driver.cpp:1647