[0096d3]: vcl / emulation / stlcomp.h Maximize Restore History

Download this file

stlcomp.h    388 lines (331 with data), 12.3 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
/*
*
* Copyright (c) 1997
* Moscow Center for SPARC Technology
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. Moscow Center for SPARC Technology makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*
*/
#ifndef __STLCOMP_H
# define __STLCOMP_H
//==========================================================
// Features selection
// Uncomment that to disable exception handling
// # define __STL_NO_EXCEPTIONS 1
// Uncomment that to disable std namespace usage
// # define __STL_NO_NAMESPACES 1
// Comment that to not include defalloc.h ( no defaults changed )
# define __STL_USE_DEFALLOC 1
// Uncomment that to to use new-based allocator as default
// # define __STL_USE_NEWALLOC 1
// Uncomment this to use malloc-based allocator as default
// # define __STL_USE_MALLOC 1
// Uncomment this to disable using std by default
// # define __STL_NO_USING_STD 1
// define __STL_USE_ABBREVS if your linker has trouble with long
// external symbols
// # define __STL_USE_ABBREVS 1
// set this to force checked allocators
// # define __STL_DEBUG_ALLOC 1
// Mostly correct guess
# define __STL_UINT32_T unsigned long
//==========================================================
//==========================================================
// default values of autoconf flags
//==========================================================
// the values chosen here as defaults try to give
// maximum functionality on the most conservative settings
// Uncomment this if your compiler supports "bool"
// # define __STL_BOOL_KEYWORD 1
// Uncomment this if your compiler has "bool" keyword reserved
// # define __STL_RESERVED_BOOL_KEYWORD 1
// Comment this if your compiler doesn't support that
# define __STL_DEFAULT_TEMPLATE_PARAM 1
// Uncomment this if your compiler support only complete types as
// default parameters
// # define __STL_DEFAULT_TYPE_PARAM 1
// Comment this if your compiler lacks static data
// members template declarations
// Uncomment next line if your compiler supports __attribute__((weak))
# define __STL_STATIC_TEMPLATE_DATA 1
// # define __STL_WEAK_ATTRIBUTE 1
// Uncomment this if your C library has lrand48() function
// # define __STL_RAND48 1
// Uncomment this if your compiler can't inline while(), for()
// # define __STL_LOOP_INLINE_PROBLEMS 1
// Uncomment this if your compiler supports namespaces
// # define __STL_NAMESPACES 1
// Uncomment this if your compiler supports typename
// # define __STL_TYPENAME 1
// Uncomment this if your compiler supports mutable
// # define __STL_MUTABLE 1
// Uncomment if const_cast<> is available
// # define __STL_NEW_STYLE_CASTS 1
// Uncomment this if your compiler supports explicit constructors
// # define __STL_EXPLICIT 1
// Uncomment this if your compiler supports exceptions
// # define __STL_EXCEPTIONS 1
// Uncomment this if your compiler supports exception specifications
// with reduced overhead ( e.g. inlines them, not vice versa)
// # define __STL_EXCEPTION_SPEC
// Uncomment if long long is available
// # define __STL_LONG_LONG 1
// Uncomment this for wchar_t functinality
// # define __STL_WCHAR_T 1
// Uncomment if needed full specialization syntax : template <> struct ....
// # define __STL_FULL_SPEC_SYNTAX 1
// Uncomment if bad_alloc defined in <new>
// # define __STL_BAD_ALLOC_DEFINED 1
// Uncomment if member templates available
// # define __STL_MEMBER_TEMPLATES 1
// Uncomment if member templates available
// # define __STL_FRIEND_TEMPLATES 1
// Uncomment if available
// # define __STL_CLASS_PARTIAL_SPECIALIZATION 1
// Uncomment if available
// # define __STL_FUNC_PARTIAL_ORDERING 1
// Uncomment if available
// # define __STL_AUTOMATIC_TYPE_TRAITS 1
// Uncomment if getting errors compiling mem_fun* adaptors
// # define __STL_MEMBER_POINTER_PARAM_BUG 1
// All these settings don't affect performance/functionality
// Comment them if your compiler has no problems.
# define __STL_BASE_MATCH_BUG 1
// # define __STL_NESTED_TYPE_PARAM_BUG 1
# define __STL_UNUSED_REQUIRED_BUG 1
# define __STL_UNINITIALIZABLE_PRIVATE 1
# define __STL_BASE_TYPEDEF_OUTSIDE_BUG 1
# define __STL_CONST_CONSTRUCTOR_BUG 1
// if your compiler have serious problems with typedefs, try this one
// # define __STL_BASE_TYPEDEF_BUG 1
//==========================================================
//==========================================================
// per-version compiler features recognition
//==========================================================
// reporting of incompatibility
# define __GIVE_UP_WITH_STL(message) void give_up() \
{ upgrade_the_compiler_to_use_STL;}
# if defined(__sgi) && !defined(__GNUC__)
# if defined(_BOOL) || ! ((_MIPS_ISA < 2) || defined (_ABIO32))
# define __STL_BOOL_KEYWORD
# endif
# if defined(_TYPENAME)
# define __STL_TYPENAME
# endif
# ifdef _PARTIAL_SPECIALIZATION_OF_CLASS_TEMPLATES
# define __STL_CLASS_PARTIAL_SPECIALIZATION
# endif
# ifdef _MEMBER_TEMPLATES
# define __STL_MEMBER_TEMPLATES
# endif
# ifdef __EXCEPTIONS
# define __STL_USE_EXCEPTIONS
# endif
# if !defined(_NOTHREADS) && !defined(_PTHREADS)
# define __STL_SGI_THREADS
# endif
# endif
// AIX xlC, is there more specific define ?
#if defined(_AIX)
# define __STL_RESERVED_BOOL_KEYWORD 1
# undef __STL_DEFAULT_TEMPLATE_PARAM
# undef __STL_DEFAULT_TYPE_PARAM
# undef __STL_NAMESPACES
# undef __STL_UNINITIALIZABLE_PRIVATE
# define __STL_UNINITIALIZABLE_PRIVATE 1
# define __STL_BASE_TYPEDEF_OUTSIDE_BUG 1
# undef __STL_CONST_CONSTRUCTOR_BUG
# define __STL_CONST_CONSTRUCTOR_BUG 1
#endif
// Microsoft Visual C++ 4.0, 4.1, 4.2, 5.0
# if defined(_MSC_VER)
// comment this one to try experimantal allocator
// # define __STL_USE_NEWALLOC 1
# undef __STL_BOOL_KEYWORD
# undef __STL_UNINITIALIZABLE_PRIVATE
# undef __STL_BASE_MATCH_BUG
# undef __STL_DEFAULT_TEMPLATE_PARAM
# ifdef _CPPUNWIND
# define __STL_USE_EXCEPTIONS
# endif
# if defined ( _MT )
# define __STL_WIN32THREADS
# endif
# if ( _MSC_VER>=1000 )
# define __STL_NAMESPACES 1
# define __STL_NEW_STYLE_CASTS 1
# undef __STL_CONST_CONSTRUCTOR_BUG
# define __STL_CONST_CONSTRUCTOR_BUG 1
# define __STL_LONG_DOUBLE 1
# if ( _MSC_VER<=1010 )
// "bool" is reserved in MSVC 4.1 while <yvals.h> absent, so :
# define __STL_RESERVED_BOOL_KEYWORD 1
# define __STL_USE_ABBREVS 1
# else
# define __STL_YVALS_H 1
# define __STL_BAD_ALLOC_DEFINED 1
# endif
# endif
# if (_MSC_VER >= 1100) // MSVC 5.0
# define __STL_DEFAULT_TEMPLATE_PARAM 1
# define __STL_TYPENAME 1
# define __STL_EXPLICIT 1
# define __STL_MUTABLE 1
# endif
# endif
// Borland C++ ( 5.x )
# if defined ( __BORLANDC__ )
# undef __STL_UNINITIALIZABLE_PRIVATE
# undef __STL_DEFAULT_TEMPLATE_PARAM
# if ( __BORLANDC__ < 0x500 )
# undef __STL_BOOL_KEYWORD
# undef __STL_NAMESPACES
# undef __STL_DEFAULT_TEMPLATE_PARAM
# undef __STL_NESTED_TYPE_PARAM_BUG
# undef __STL_BASE_MATCH_BUG
# define __STL_NESTED_TYPE_PARAM_BUG 1
# define __STL_BASE_MATCH_BUG 1
# else
# define __STL_BOOL_KEYWORD 1
# define __STL_DEFAULT_TYPE_PARAM 1
# define __STL_NAMESPACES 1
# define __STL_EXPLICIT 1
# define __STL_TYPENAME 1
# define __STL_USE_EXCEPTIONS 1
# define __STL_NEW_STYLE_CASTS
# define __STL_LONG_DOUBLE 1
# define __STL_MUTABLE 1
# define __STL_WCHAR_T 1
# define __STL_NEW_HEADER_NAMES 1
# undef __STL_CONST_CONSTRUCTOR_BUG
# define __STL_CONST_CONSTRUCTOR_BUG 1
# endif
# undef __STL_LOOP_INLINE_PROBLEMS
# define __STL_LOOP_INLINE_PROBLEMS 1
// empty exception spec make things worse in BC, so:
# undef __STL_EXCEPTION_SPEC
# endif
# if defined(__SUNPRO_CC)
# if ( __SUNPRO_CC <= 0x420 )
// SUNPro C++ 4.1 and above
# undef __STL_BOOL_KEYWORD
# undef __STL_DEFAULT_TEMPLATE_PARAM
# undef __STL_NAMESPACES
# define __STL_USE_EXCEPTIONS 1
# undef __STL_EXCEPTION_SPEC
# define __STL_EXCEPTION_SPEC 1
# undef __STL_UNINITIALIZABLE_PRIVATE
# define __STL_UNINITIALIZABLE_PRIVATE 1
# define __STL_LONG_LONG 1
# define __STL_WCHAR_T 1
// SUNPro C++ prior to 4.1
# if ( __SUNPRO_CC < 0x410 )
// hard times ;(
# define __STL_BASE_MATCH_BUG 1
# define __STL_BASE_TYPEDEF_BUG 1
# if ( __SUNPRO_CC < 0x401 )
__GIVE_UP_WITH_STL(SUNPRO_401)
# endif
# else
# if ( __SUNPRO_CC >= 0x420 )
# define __STL_FULL_SPEC_SYNTAX 1
# endif
# endif
# endif
# endif
// g++ 2.7.x and above
# if defined (__GNUC__ )
# undef __STL_UNINITIALIZABLE_PRIVATE
# define __STL_BOOL_KEYWORD 1
// cygnus have a lot of version, let's assume the best.
// no specific definitions known except this one
# if defined (__CYGWIN32__)
# define __CYGNUS_GCC__
# endif
# if ! ( __GNUC__ > 2 || __GNUC_MINOR__ > 7 || defined (__CYGNUS_GCC__) )
// Will it work with 2.6 ? I doubt it.
# if ( __GNUC_MINOR__ < 7 )
__GIVE_UP_WITH_STL(GCC_272);
# endif
# undef __STL_NAMESPACES
# undef __STL_DEFAULT_TEMPLATE_PARAM
# define __STL_DEFAULT_TYPE_PARAM 1
# undef __STL_STATIC_TEMPLATE_DATA
# define __STL_NESTED_TYPE_PARAM_BUG 1
# undef __STL_STATIC_TEMPLATE_DATA
# define __STL_BASE_MATCH_BUG 1
// unused operators are required (forward)
# undef __STL_EXPLICIT
# define __STL_EXPLICIT 1
# undef __STL_UNINITIALIZABLE_PRIVATE
# define __STL_UNINITIALIZABLE_PRIVATE 1
# undef __STL_CONST_CONSTRUCTOR_BUG
# undef __STL_LONG_LONG
# undef __STL_WCHAR_T
# define __STL_LONG_LONG 1
# define __STL_WCHAR_T 1
# define __STL_MUTABLE 1
# define __STL_NEW_STYLE_CASTS 1
// default for gcc-2.7.2 is no exceptions, let's follow it
# endif /* __GNUC__ > 2 */
// cygnus gcc may be as advanced as that
# if defined ( __CYGNUS_GCC__ )
# undef __STL_DEFAULT_TEMPLATE_PARAM
# define __STL_DEFAULT_TEMPLATE_PARAM 1
# undef __STL_STATIC_TEMPLATE_DATA
# define __STL_STATIC_TEMPLATE_DATA 1
# undef __STL_NAMESPACES
# define __STL_EXPLICIT 1
# define __STL_TYPENAME 1
# endif
// static template data members workaround strategy for gcc tries
// to use weak symbols.
// if you don't want to use that, #define __STL_WEAK_ATTRIBUTE=0 ( you'll
// have to put "#define __PUT_STATIC_DATA_MEMBERS_HERE" line in one of your
// compilation unit ( or CFLAGS for it ) _before_ including any STL header ).
# if !(defined (__STL_STATIC_TEMPLATE_DATA) || defined (__STL_WEAK_ATTRIBUTE ))
// systems using GNU ld or format that supports weak symbols
// may use "weak" attribute
// Linux & Solaris ( x86 & SPARC ) are being auto-recognized here
# if defined(__STL_GNU_LD) || defined(__ELF__) || \
(( defined (__SVR4) || defined ( __svr4__ )) && \
( defined (sun) || defined ( __sun__ )))
# define __STL_WEAK_ATTRIBUTE 1
# endif
# endif /* __STL_WEAK_ATTRIBUTE */
# endif /* __GNUC__ */
# if defined (__WATCOM_CPLUSPLUS__)
# if (__WATCOM_CPLUSPLUS__ >= 1100 )
// Can define if you enable /xs compiler option
//# if 0
//# define __STL_EXCEPTIONS 1
//# define __STL_EXCEPTION_SPEC 1
//# else
//# undef __STL_EXCEPTIONS
//# undef __STL_EXCEPTION_SPEC
//# endif
# define __STL_NESTED_TYPE_PARAM_BUG 1
# define __STL_BOOL_KEYWORD 1
# undef __STL_DEFAULT_TEMPLATE_PARAM
# define __STL_STATIC_TEMPLATE_DATA 1
# define __STL_EXPLICIT 1
# undef __STL_BASE_MATCH_BUG
# undef __STL_BASE_TYPEDEF_BUG
# define __STL_BASE_TYPEDEF_OUTSIDE_BUG 1
# undef __STL_UNINITIALIZABLE_PRIVATE
# define __STL_CONST_CONSTRUCTOR_BUG 1
# define __STL_NEW_HEADER_NAMES 1
# define __STL_LONG_DOUBLE 1
# define __STL_MUTABLE 1
# define __STL_NEW_STYLE_CASTS 1
# undef __STL_UNUSED_REQUIRED_BUG
# endif
# endif /* __WATCOM_CPLUSPLUS__ */
# undef __GIVE_UP_WITH_STL
#endif // __STLCOMP_H