Ne.app NeANT
The Ne.app NeANT User module of the NeANT distribution.
27.forward.cpp
Go to the documentation of this file.
1
29#include <iosfwd>
30
31// IMPORTANT: do not #include any other header before the declarations
32// below in order not to accidentally bring in any missing
33// definitions from the #included header
34
35#ifndef _RWSTD_NO_NAMESPACE
36# define std std
37#else
38# define std
39#endif // _RWSTD_NO_NAMESPACE
40
41typedef char C;
42
43typedef std::char_traits<C> ctraits;
44typedef std::allocator<C> calloc;
45
46typedef std::basic_ios<C, ctraits> C_basic_ios;
47typedef std::basic_streambuf<C, ctraits> C_basic_streambuf;
48typedef std::basic_istream<C, ctraits> C_basic_istream;
49typedef std::basic_ostream<C, ctraits> C_basic_ostream;
50typedef std::basic_iostream<C, ctraits> C_basic_iostream;
51typedef std::basic_stringbuf<C, ctraits, calloc> C_basic_stringbuf;
52typedef std::basic_istringstream<C, ctraits, calloc> C_basic_istringstream;
53typedef std::basic_ostringstream<C, ctraits, calloc> C_basic_ostringstream;
54typedef std::basic_stringstream<C, ctraits, calloc> C_basic_stringstream;
55
56typedef std::basic_filebuf<C, ctraits> C_basic_filebuf;
57typedef std::basic_ifstream<C, ctraits> C_basic_ifstream;
58typedef std::basic_ofstream<C, ctraits> C_basic_ofstream;
59typedef std::basic_fstream<C, ctraits> C_basic_fstream;
60
61typedef std::istreambuf_iterator<C, ctraits> C_istreambuf_iterator;
62typedef std::ostreambuf_iterator<C, ctraits> C_ostreambuf_iterator;
63
64#ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
65
66// make sure that default template arguments are specified
67
68typedef std::basic_ios<C> C_X_basic_ios;
69typedef std::basic_streambuf<C> C_X_basic_streambuf;
70typedef std::basic_istream<C> C_X_basic_istream;
71typedef std::basic_ostream<C> C_X_basic_ostream;
72typedef std::basic_iostream<C> C_X_basic_iostream;
73typedef std::basic_stringbuf<C> C_X_basic_stringbuf;
74typedef std::basic_istringstream<C> C_X_basic_istringstream;
75typedef std::basic_ostringstream<C> C_X_basic_ostringstream;
76typedef std::basic_stringstream<C> C_X_basic_stringstream;
77
78typedef std::basic_filebuf<C> C_X_basic_filebuf;
79typedef std::basic_ifstream<C> C_X_basic_ifstream;
80typedef std::basic_ofstream<C> C_X_basic_ofstream;
81typedef std::basic_fstream<C> C_X_basic_fstream;
82
83typedef std::istreambuf_iterator<C> C_X_istreambuf_iterator;
84typedef std::ostreambuf_iterator<C> C_X_ostreambuf_iterator;
85
86#endif // _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
87
88typedef std::fpos<C> C_fpos;
89
90// test whether all required typedefs are defined
91typedef std::ios C_ios;
92typedef std::streambuf C_streambuf;
93typedef std::istream C_istream;
94typedef std::ostream C_ostream;
95typedef std::iostream C_iostream;
96typedef std::stringbuf C_stringbuf;
97typedef std::istringstream C_istringstream;
98typedef std::ostringstream C_ostringstream;
99typedef std::stringstream C_stringstream;
100typedef std::filebuf C_filebuf;
101typedef std::ifstream C_ifstream;
102typedef std::ofstream C_ofstream;
103typedef std::fstream C_fstream;
104
105typedef std::streampos C_streampos;
106
107
108#ifndef _RWSTD_NO_WCHAR_T
109
110typedef std::wios W_wios;
111typedef std::wstreambuf W_wstreambuf;
112typedef std::wistream W_wistream;
113typedef std::wostream W_wostream;
114typedef std::wiostream W_wiostream;
115typedef std::wstringbuf W_wstringbuf;
116typedef std::wistringstream W_wistringstream;
117typedef std::wostringstream W_wostringstream;
118typedef std::wstringstream W_wstringstream;
119typedef std::wfilebuf W_wfilebuf;
120typedef std::wifstream W_wifstream;
121typedef std::wofstream W_wofstream;
122typedef std::wfstream W_wfstream;
123
124typedef std::wstreampos W_wstreampos;
125
126#endif // _RWSTD_NO_WCHAR_T
127
128
130#include <rw_driver.h>
131
132
134#ifndef _RWSTD_NO_PART_SPEC_OVERLOAD
135
136template <class T, class U>
137bool is_same_type (const T*, const U*) { return false; }
138
139template <class T>
140bool is_same_type (const T*, const T*) { return true; }
141
142#else // ifdef _RWSTD_NO_PART_SPEC_OVERLOAD
143
144template <class T, class U>
145struct is_same
146{
147 struct yes {};
148 struct no { yes no_ [2]; };
149 template <class T>
150 struct Type {};
151
152 static yes test (Type<T>, Type<T>);
153 static no test (...);
154
155 enum { value = sizeof (test (Type<T> (), Type<U> ())) == sizeof (yes) };
156};
157
158template <class T, class U>
159bool is_same_type (const T*, const U*) { return is_same<T, U>::value; }
160
161#endif // _RWSTD_NO_PART_SPEC_OVERLOAD
162
163
165static int
166run_test (int, char*[])
167{
168#define TEST_TYPE(T) \
169 rw_assert (is_same_type ((C_X_ ## T*)0, (C_ ## T*)0), 0, __LINE__, \
170 "%s", #T);
171
172 // check that default arguments are correct
173 TEST_TYPE (basic_ios);
174 TEST_TYPE (basic_streambuf);
175 TEST_TYPE (basic_istream);
176 TEST_TYPE (basic_ostream);
177 TEST_TYPE (basic_iostream);
178 TEST_TYPE (basic_stringbuf);
179 TEST_TYPE (basic_istringstream);
180 TEST_TYPE (basic_ostringstream);
181 TEST_TYPE (basic_stringstream);
182
183 TEST_TYPE (basic_filebuf);
184 TEST_TYPE (basic_ifstream);
185 TEST_TYPE (basic_ofstream);
186 TEST_TYPE (basic_fstream);
187
188 TEST_TYPE (istreambuf_iterator);
189 TEST_TYPE (ostreambuf_iterator);
190
191
192#define TEST_TYPEDEF(T, U) \
193 rw_assert (is_same_type ((T*)0, (U*)0), 0, __LINE__, \
194 "%s == %s", #T, #U);
195
196 // check that typedefs are correctly defined
197 TEST_TYPEDEF (std::ios, C_ios);
198 TEST_TYPEDEF (std::streambuf, C_streambuf);
199 TEST_TYPEDEF (std::istream, C_istream);
200 TEST_TYPEDEF (std::ostream, C_ostream);
201 TEST_TYPEDEF (std::iostream, C_iostream);
202 TEST_TYPEDEF (std::stringbuf, C_stringbuf);
203 TEST_TYPEDEF (std::istringstream, C_istringstream);
204 TEST_TYPEDEF (std::ostringstream, C_ostringstream);
205 TEST_TYPEDEF (std::stringstream, C_stringstream);
206 TEST_TYPEDEF (std::filebuf, C_filebuf);
207 TEST_TYPEDEF (std::ifstream, C_ifstream);
208 TEST_TYPEDEF (std::ofstream, C_ofstream);
209 TEST_TYPEDEF (std::fstream, C_fstream);
210
211#ifndef _RWSTD_NO_WCHAR_T
212
213 TEST_TYPEDEF (std::wios, W_wios);
214 TEST_TYPEDEF (std::wstreambuf, W_wstreambuf);
215 TEST_TYPEDEF (std::wistream, W_wistream);
216 TEST_TYPEDEF (std::wostream, W_wostream);
217 TEST_TYPEDEF (std::wiostream, W_wiostream);
218 TEST_TYPEDEF (std::wstringbuf, W_wstringbuf);
219 TEST_TYPEDEF (std::wistringstream, W_wistringstream);
220 TEST_TYPEDEF (std::wostringstream, W_wostringstream);
221 TEST_TYPEDEF (std::wstringstream, W_wstringstream);
222 TEST_TYPEDEF (std::wfilebuf, W_wfilebuf);
223 TEST_TYPEDEF (std::wifstream, W_wifstream);
224 TEST_TYPEDEF (std::wofstream, W_wofstream);
225 TEST_TYPEDEF (std::wfstream, W_wfstream);
226 TEST_TYPEDEF (std::wstreampos, std::streampos);
227
228#endif // _RWSTD_NO_WCHAR_T
229
230 return 0;
231}
232
233
235int main (int argc, char *argv[])
236{
237 return rw_test (argc, argv, __FILE__,
238 "lib.iostream.forward",
239 0, // no comment
240 run_test,
241 "",
242 0);
243}
#define T
Definition 17.names.cpp:163
#define U
Definition 17.names.cpp:164
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
T value(const T &val)
std::fstream C_fstream
std::wstreambuf W_wstreambuf
std::basic_iostream< C > C_X_basic_iostream
std::streampos C_streampos
std::basic_stringbuf< C, ctraits, calloc > C_basic_stringbuf
std::streambuf C_streambuf
std::basic_istringstream< C, ctraits, calloc > C_basic_istringstream
#define TEST_TYPEDEF(T, U)
std::wstringstream W_wstringstream
std::basic_ofstream< C > C_X_basic_ofstream
std::basic_ifstream< C > C_X_basic_ifstream
std::basic_ostream< C, ctraits > C_basic_ostream
std::iostream C_iostream
std::istringstream C_istringstream
std::basic_iostream< C, ctraits > C_basic_iostream
std::basic_filebuf< C > C_X_basic_filebuf
std::filebuf C_filebuf
std::basic_stringstream< C > C_X_basic_stringstream
std::ostreambuf_iterator< C, ctraits > C_ostreambuf_iterator
std::wistringstream W_wistringstream
std::basic_ios< C, ctraits > C_basic_ios
std::wfstream W_wfstream
std::stringbuf C_stringbuf
std::ofstream C_ofstream
std::basic_ofstream< C, ctraits > C_basic_ofstream
std::basic_stringbuf< C > C_X_basic_stringbuf
std::basic_istream< C > C_X_basic_istream
std::wofstream W_wofstream
std::ifstream C_ifstream
std::wios W_wios
std::stringstream C_stringstream
std::ostringstream C_ostringstream
std::istream C_istream
std::basic_streambuf< C > C_X_basic_streambuf
std::ostream C_ostream
bool is_same_type(const T *, const U *)
char C
std::basic_istream< C, ctraits > C_basic_istream
std::istreambuf_iterator< C, ctraits > C_istreambuf_iterator
std::basic_fstream< C > C_X_basic_fstream
std::basic_streambuf< C, ctraits > C_basic_streambuf
std::wifstream W_wifstream
std::char_traits< C > ctraits
std::wistream W_wistream
std::wostringstream W_wostringstream
#define TEST_TYPE(T)
std::basic_ostream< C > C_X_basic_ostream
std::basic_stringstream< C, ctraits, calloc > C_basic_stringstream
std::basic_istringstream< C > C_X_basic_istringstream
std::wfilebuf W_wfilebuf
std::basic_ostringstream< C > C_X_basic_ostringstream
std::basic_filebuf< C, ctraits > C_basic_filebuf
std::basic_ostringstream< C, ctraits, calloc > C_basic_ostringstream
std::ios C_ios
std::wstreampos W_wstreampos
std::basic_fstream< C, ctraits > C_basic_fstream
std::wostream W_wostream
std::wstringbuf W_wstringbuf
std::fpos< C > C_fpos
std::wiostream W_wiostream
std::ostreambuf_iterator< C > C_X_ostreambuf_iterator
std::basic_ifstream< C, ctraits > C_basic_ifstream
std::istreambuf_iterator< C > C_X_istreambuf_iterator
std::basic_ios< C > C_X_basic_ios
std::allocator< C > calloc
#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,...)