1 /*
2  *
3  * Copyright (c) 1994
4  * Hewlett-Packard Company
5  *
6  * Permission to use, copy, modify, distribute and sell this software
7  * and its documentation for any purpose is hereby granted without fee,
8  * provided that the above copyright notice appear in all copies and
9  * that both that copyright notice and this permission notice appear
10  * in supporting documentation.  Hewlett-Packard Company makes no
11  * representations about the suitability of this software for any
12  * purpose.  It is provided "as is" without express or implied warranty.
13  *
14  * Copyright (c) 1997
15  * Silicon Graphics
16  *
17  * Permission to use, copy, modify, distribute and sell this software
18  * and its documentation for any purpose is hereby granted without fee,
19  * provided that the above copyright notice appear in all copies and
20  * that both that copyright notice and this permission notice appear
21  * in supporting documentation.  Silicon Graphics makes no
22  * representations about the suitability of this software for any
23  * purpose.  It is provided "as is" without express or implied warranty.
24  *
25  */
26 
27 #ifndef __STL_CONFIG_H
28 # define __STL_CONFIG_H
29 
30 // Flags:
31 // * __STL_NO_BOOL: defined if the compiler doesn't have bool as a builtin
32 //   type.
33 // * __STL_HAS_WCHAR_T: defined if the compier has wchar_t as a builtin type.
34 // * __STL_NO_DRAND48: defined if the compiler doesn't have the drand48
35 //   function.
36 // * __STL_STATIC_TEMPLATE_MEMBER_BUG: defined if the compiler can't handle
37 //   static members of template classes.
38 // * __STL_STATIC_CONST_INIT_BUG: defined if the compiler can't handle a
39 //   constant-initializer in the declaration of a static const data member
40 //   of integer type.  (See section 9.4.2, paragraph 4, of the C++ standard.)
41 // * __STL_CLASS_PARTIAL_SPECIALIZATION: defined if the compiler supports
42 //   partial specialization of template classes.
43 // * __STL_PARTIAL_SPECIALIZATION_SYNTAX: defined if the compiler
44 //   supports partial specialization syntax for full specialization of
45 //   class templates.  (Even if it doesn't actually support partial
46 //   specialization itself.)
47 // * __STL_FUNCTION_TMPL_PARTIAL_ORDER: defined if the compiler supports
48 //   partial ordering of function templates.  (a.k.a partial specialization
49 //   of function templates.)
50 // * __STL_MEMBER_TEMPLATES: defined if the compiler supports template
51 //   member functions of classes.
52 // * __STL_MEMBER_TEMPLATE_CLASSES: defined if the compiler supports
53 //   nested classes that are member templates of other classes.
54 // * __STL_TEMPLATE_FRIENDS: defined if the compiler supports templatized
55 //   friend declarations.
56 // * __STL_EXPLICIT_FUNCTION_TMPL_ARGS: defined if the compiler
57 //   supports calling a function template by providing its template
58 //   arguments explicitly.
59 // * __STL_LIMITED_DEFAULT_TEMPLATES: defined if the compiler is unable
60 //   to handle default template parameters that depend on previous template
61 //   parameters.
62 // * __STL_NON_TYPE_TMPL_PARAM_BUG: defined if the compiler has trouble with
63 //   function template argument deduction for non-type template parameters.
64 // * __SGI_STL_NO_ARROW_OPERATOR: defined if the compiler is unable
65 //   to support the -> operator for iterators.
66 // * __STL_DEFAULT_CONSTRUCTOR_BUG: defined if T() does not work properly
67 //   when T is a builtin type.
68 // * __STL_USE_EXCEPTIONS: defined if the compiler (in the current compilation
69 //   mode) supports exceptions.
70 // * __STL_USE_NAMESPACES: defined if the compiler has the necessary
71 //   support for namespaces.
72 // * __STL_NO_EXCEPTION_HEADER: defined if the compiler does not have a
73 //   standard-conforming header <exception>.
74 // * __STL_NO_BAD_ALLOC: defined if the compiler does not have a <new>
75 //   header, or if <new> does not contain a bad_alloc class.  If a bad_alloc
76 //   class exists, it is assumed to be in namespace std.
77 // * __STL_SGI_THREADS: defined if this is being compiled for an SGI IRIX
78 //   system in multithreaded mode, using native SGI threads instead of
79 //   pthreads.
80 // * __STL_WIN32THREADS: defined if this is being compiled on a WIN32
81 //   compiler in multithreaded mode.
82 // * __STL_PTHREADS: defined if we should use portable pthreads
83 //   synchronization.
84 // * __STL_UITHREADS: defined if we should use UI / solaris / UnixWare threads
85 //   synchronization.  UIthreads are similar to pthreads, but are based
86 //   on an earlier version of the Posix threads standard.
87 // * __STL_LONG_LONG if the compiler has long long and unsigned long long
88 //   types.  (They're not in the C++ standard, but they are expected to be
89 //   included in the forthcoming C9X standard.)
90 // * __STL_THREADS is defined if thread safety is needed.
91 // * __STL_VOLATILE is defined to be "volatile" if threads are being
92 //   used, and the empty string otherwise.
93 // * __STL_USE_CONCEPT_CHECKS enables some extra compile-time error
94 //   checking to make sure that user-defined template arguments satisfy
95 //   all of the appropriate requirements.  This may result in more
96 //   comprehensible error messages.  It incurs no runtime overhead.  This
97 //   feature requires member templates and partial specialization.
98 // * __STL_NO_USING_CLAUSE_IN_CLASS: The compiler does not handle "using"
99 //   clauses inside of class definitions.
100 // * __STL_NO_FRIEND_TEMPLATE_CLASS: The compiler does not handle friend
101 //   declaractions where the friend is a template class.
102 // * __STL_NO_FUNCTION_PTR_IN_CLASS_TEMPLATE: The compiler does not
103 //   support the use of a function pointer type as the argument
104 //   for a template.
105 // * __STL_MEMBER_TEMPLATE_KEYWORD: standard C++ requires the template
106 //   keyword in a few new places (14.2.4).  This flag is set for
107 //   compilers that support (and require) this usage.
108 
109 
110 // User-settable macros that control compilation:
111 // * __STL_USE_SGI_ALLOCATORS: if defined, then the STL will use older
112 //   SGI-style allocators, instead of standard-conforming allocators,
113 //   even if the compiler supports all of the language features needed
114 //   for standard-conforming allocators.
115 // * __STL_NO_NAMESPACES: if defined, don't put the library in namespace
116 //   std, even if the compiler supports namespaces.
117 // * __STL_NO_RELOPS_NAMESPACE: if defined, don't put the relational
118 //   operator templates (>, <=. >=, !=) in namespace std::rel_ops, even
119 //   if the compiler supports namespaces and partial ordering of
120 //   function templates.
121 // * __STL_ASSERTIONS: if defined, then enable runtime checking through the
122 //   __stl_assert macro.
123 // * _PTHREADS: if defined, use Posix threads for multithreading support.
124 // * _UITHREADS:if defined, use SCO/Solaris/UI threads for multithreading
125 //   support
126 // * _NOTHREADS: if defined, don't use any multithreading support.
127 // * _STL_NO_CONCEPT_CHECKS: if defined, disables the error checking that
128 //   we get from __STL_USE_CONCEPT_CHECKS.
129 // * __STL_USE_NEW_IOSTREAMS: if defined, then the STL will use new,
130 //   standard-conforming iostreams (e.g. the <iosfwd> header).  If not
131 //   defined, the STL will use old cfront-style iostreams (e.g. the
132 //   <iostream.h> header).
133 
134 // Other macros defined by this file:
135 
136 // * bool, true, and false, if __STL_NO_BOOL is defined.
137 // * typename, as a null macro if it's not already a keyword.
138 // * explicit, as a null macro if it's not already a keyword.
139 // * namespace-related macros (__STD, __STL_BEGIN_NAMESPACE, etc.)
140 // * exception-related macros (__STL_TRY, __STL_UNWIND, etc.)
141 // * __stl_assert, either as a test or as a null macro, depending on
142 //   whether or not __STL_ASSERTIONS is defined.
143 
144 # if defined(_PTHREADS) && !defined(_NOTHREADS)
145 #     define __STL_PTHREADS
146 # endif
147 
148 # if defined(_UITHREADS) && !defined(_PTHREADS) && !defined(_NOTHREADS)
149 #     define __STL_UITHREADS
150 # endif
151 
152 # if defined(__sgi) && !defined(__GNUC__)
153 #   include <standards.h>
154 #   if !defined(_BOOL)
155 #     define __STL_NO_BOOL
156 #   endif
157 #   if defined(_MIPS_SIM) && _MIPS_SIM == _ABIO32
158 #     define __STL_STATIC_CONST_INIT_BUG
159 #   endif
160 #   if defined(_WCHAR_T_IS_KEYWORD)
161 #     define __STL_HAS_WCHAR_T
162 #   endif
163 #   if !defined(_TYPENAME_IS_KEYWORD)
164 #     define __STL_NEED_TYPENAME
165 #   endif
166 #   ifdef _PARTIAL_SPECIALIZATION_OF_CLASS_TEMPLATES
167 #     define __STL_CLASS_PARTIAL_SPECIALIZATION
168 #   endif
169 #   if (_COMPILER_VERSION >= 730) && defined(_MIPS_SIM) && _MIPS_SIM != _ABIO32
170 #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER
171 #   endif
172 #   ifdef _MEMBER_TEMPLATES
173 #     define __STL_MEMBER_TEMPLATES
174 #     define __STL_TEMPLATE_FRIENDS
175 #     define __STL_MEMBER_TEMPLATE_CLASSES
176 #   endif
177 #   if defined(_MEMBER_TEMPLATE_KEYWORD)
178 #     define __STL_MEMBER_TEMPLATE_KEYWORD
179 #   endif
180 #   if defined(_STANDARD_C_PLUS_PLUS)
181 #     define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
182 #   endif
183 #   if (_COMPILER_VERSION >= 730) && defined(_MIPS_SIM) && _MIPS_SIM != _ABIO32
184 #     define __STL_MEMBER_TEMPLATE_KEYWORD
185 #   endif
186 #   if COMPILER_VERSION < 720 || (defined(_MIPS_SIM) && _MIPS_SIM == _ABIO32)
187 #     define __STL_DEFAULT_CONSTRUCTOR_BUG
188 #   endif
189 #   if !defined(_EXPLICIT_IS_KEYWORD)
190 #     define __STL_NEED_EXPLICIT
191 #   endif
192 #   ifdef __EXCEPTIONS
193 #     define __STL_USE_EXCEPTIONS
194 #   endif
195 #   if (_COMPILER_VERSION >= 721) && defined(_NAMESPACES)
196 #     define __STL_HAS_NAMESPACES
197 #   endif
198 #   if (_COMPILER_VERSION < 721) || \
199     !defined(__STL_HAS_NAMESPACES) || defined(__STL_NO_NAMESPACES)
200 #     define __STL_NO_EXCEPTION_HEADER
201 #   endif
202 #   if _COMPILER_VERSION < 730 || !defined(_STANDARD_C_PLUS_PLUS) || \
203       !defined(_NAMESPACES)
204 #     define __STL_NO_BAD_ALLOC
205 #   endif
206 #   if !defined(_NOTHREADS) && !defined(__STL_PTHREADS)
207 #     define __STL_SGI_THREADS
208 #   endif
209 #   if defined(_LONGLONG) && defined(_SGIAPI) && _SGIAPI
210 #     define __STL_LONG_LONG
211 #   endif
212 #   if _COMPILER_VERSION >= 730 && defined(_STANDARD_C_PLUS_PLUS)
213 #     define __STL_USE_NEW_IOSTREAMS
214 #   endif
215 #   if _COMPILER_VERSION >= 730 && defined(_STANDARD_C_PLUS_PLUS)
216 #     define __STL_CAN_THROW_RANGE_ERRORS
217 #   endif
218 #   if _COMPILER_VERSION >= 730 && defined(_STANDARD_C_PLUS_PLUS)
219 #     define __SGI_STL_USE_AUTO_PTR_CONVERSIONS
220 #   endif
221 # endif
222 
223 
224 /*
225  * Jochen Schlick '1999  - added new #defines (__STL)_UITHREADS (for
226  *                         providing SCO / Solaris / UI thread support)
227  *                       - added the necessary defines for the SCO UDK 7
228  *                         compiler (and its template friend behavior)
229  *                       - all UDK7 specific STL changes are based on the
230  *                         macro __USLC__ being defined
231  */
232 // SCO UDK 7 compiler (UnixWare 7x, OSR 5, UnixWare 2x)
233 # if defined(__USLC__)
234 #     define __STL_HAS_WCHAR_T
235 #     define __STL_CLASS_PARTIAL_SPECIALIZATION
236 #     define __STL_PARTIAL_SPECIALIZATION_SYNTAX
237 #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER
238 #     define __STL_MEMBER_TEMPLATES
239 #     define __STL_MEMBER_TEMPLATE_CLASSES
240 #     define __STL_USE_EXCEPTIONS
241 #     define __STL_HAS_NAMESPACES
242 #     define __STL_USE_NAMESPACES
243 #     define __STL_LONG_LONG
244 #     if defined(_REENTRANT)
245 #           define _UITHREADS     /* if      UnixWare < 7.0.1 */
246 #           define __STL_UITHREADS
247 //   use the following defines instead of the UI threads defines when
248 //   you want to use POSIX threads
249 //#         define _PTHREADS      /* only if UnixWare >=7.0.1 */
250 //#         define __STL_PTHREADS
251 #     endif
252 # endif
253 
254 
255 
256 # ifdef __GNUC__
257 #   if __GNUC__ == 2 && __GNUC_MINOR__ <= 7
258 #     define __STL_STATIC_TEMPLATE_MEMBER_BUG
259 #   endif
260 #   if __GNUC__ < 2
261 #     define __STL_NEED_TYPENAME
262 #     define __STL_NEED_EXPLICIT
263 #   endif
264 #   if __GNUC__ == 2 && __GNUC_MINOR__ <= 8
265 #     define __STL_NO_EXCEPTION_HEADER
266 #     define __STL_NO_BAD_ALLOC
267 #   endif
268 #   if __GNUC__ == 2 && __GNUC_MINOR__ >= 8
269 #     define __STL_CLASS_PARTIAL_SPECIALIZATION
270 #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER
271 #     define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
272 #     define __STL_MEMBER_TEMPLATES
273 #     define __STL_CAN_THROW_RANGE_ERRORS
274       //    g++ 2.8.1 supports member template functions, but not member
275       //    template nested classes.
276 #     if __GNUC_MINOR__ >= 9
277 #       define __STL_MEMBER_TEMPLATE_CLASSES
278 #       define __STL_TEMPLATE_FRIENDS
279 #       define __SGI_STL_USE_AUTO_PTR_CONVERSIONS
280 #       define __STL_HAS_NAMESPACES
281 //#       define __STL_USE_NEW_IOSTREAMS
282 #     endif
283 #   endif
284 #   define __STL_DEFAULT_CONSTRUCTOR_BUG
285 #   ifdef __EXCEPTIONS
286 #     define __STL_USE_EXCEPTIONS
287 #   endif
288 #   ifdef _REENTRANT
289 #     define __STL_PTHREADS
290 #   endif
291 #   if (__GNUC__ < 2) || (__GNUC__ == 2 && __GNUC_MINOR__ < 95)
292 #     define __STL_NO_FUNCTION_PTR_IN_CLASS_TEMPLATE
293 #   endif
294 # endif
295 
296 # if defined(__SUNPRO_CC)
297 #   define __STL_NO_BOOL
298 #   define __STL_NEED_TYPENAME
299 #   define __STL_NEED_EXPLICIT
300 #   define __STL_USE_EXCEPTIONS
301 #   ifdef _REENTRANT
302 #     define __STL_PTHREADS
303 #   endif
304 #   define __SGI_STL_NO_ARROW_OPERATOR
305 #   define __STL_PARTIAL_SPECIALIZATION_SYNTAX
306 #   define __STL_NO_EXCEPTION_HEADER
307 #   define __STL_NO_BAD_ALLOC
308 # endif
309 
310 # if defined(__COMO__)
311 #   define __STL_MEMBER_TEMPLATES
312 #   define __STL_MEMBER_TEMPLATE_CLASSES
313 #   define __STL_TEMPLATE_FRIENDS
314 #   define __STL_CLASS_PARTIAL_SPECIALIZATION
315 #   define __STL_USE_EXCEPTIONS
316 #   define __STL_HAS_NAMESPACES
317 # endif
318 
319 // Intel compiler, which uses the EDG front end.
320 # if defined(__ICL)
321 #   define __STL_LONG_LONG
322 #   define __STL_MEMBER_TEMPLATES
323 #   define __STL_MEMBER_TEMPLATE_CLASSES
324 #   define __STL_TEMPLATE_FRIENDS
325 #   define __STL_FUNCTION_TMPL_PARTIAL_ORDER
326 #   define __STL_CLASS_PARTIAL_SPECIALIZATION
327 #   define __STL_NO_DRAND48
328 #   define __STL_HAS_NAMESPACES
329 #   define __STL_USE_EXCEPTIONS
330 #   define __STL_MEMBER_TEMPLATE_KEYWORD
331 #   ifdef _CPPUNWIND
332 #     define __STL_USE_EXCEPTIONS
333 #   endif
334 #   ifdef _MT
335 #     define __STL_WIN32THREADS
336 #   endif
337 # endif
338 
339 // Mingw32, egcs compiler using the Microsoft C runtime
340 # if defined(__MINGW32__)
341 #   define __STL_NO_DRAND48
342 #   ifdef _MT
343 #     define __STL_WIN32THREADS
344 #   endif
345 # endif
346 
347 // Cygwin32, egcs compiler on MS Windows
348 # if defined(__CYGWIN__)
349 #   define __STL_NO_DRAND48
350 # endif
351 
352 
353 
354 // Microsoft compiler.
355 # if defined(_MSC_VER) && !defined(__ICL) && !defined(__MWERKS__)
356 #   define __STL_NO_DRAND48
357 #   define __STL_STATIC_CONST_INIT_BUG
358 #   define __STL_NEED_TYPENAME
359 #   define __STL_NO_USING_CLAUSE_IN_CLASS
360 #   define __STL_NO_FRIEND_TEMPLATE_CLASS
361 #   if _MSC_VER < 1100  /* 1000 is version 4.0, 1100 is 5.0, 1200 is 6.0. */
362 #     define __STL_NEED_EXPLICIT
363 #     define __STL_NO_BOOL
364 #     define __STL_NO_BAD_ALLOC
365 #   endif
366 #   if _MSC_VER > 1000
367 #     include <yvals.h>
368 #     define __STL_DONT_USE_BOOL_TYPEDEF
369 #   endif
370 #   define __STL_NON_TYPE_TMPL_PARAM_BUG
371 #   define __SGI_STL_NO_ARROW_OPERATOR
372 #   define __STL_DEFAULT_CONSTRUCTOR_BUG
373 #   ifdef _CPPUNWIND
374 #     define __STL_USE_EXCEPTIONS
375 #   endif
376 #   ifdef _MT
377 #     define __STL_WIN32THREADS
378 #   endif
379 #   if _MSC_VER >= 1200
380 #     define __STL_PARTIAL_SPECIALIZATION_SYNTAX
381 #     define __STL_HAS_NAMESPACES
382 #     define __STL_CAN_THROW_RANGE_ERRORS
383 #     define NOMINMAX
384 #     undef min
385 #     undef max
386 // disable warning 'initializers put in unrecognized initialization area'
387 #     pragma warning ( disable : 4075 )
388 // disable warning 'empty controlled statement found'
389 #     pragma warning ( disable : 4390 )
390 // disable warning 'debug symbol greater than 255 chars'
391 #     pragma warning ( disable : 4786 )
392 #   endif
393 #   if _MSC_VER < 1100
394 #     define __STL_NO_EXCEPTION_HEADER
395 #     define __STL_NO_BAD_ALLOC
396 #   endif
397     // Because of a Microsoft front end bug, we must not provide a
398     // namespace qualifier when declaring a friend function.
399 #   define __STD_QUALIFIER
400 # endif
401 
402 # if defined(__BORLANDC__)
403 #     define __STL_NO_BAD_ALLOC
404 #     define __STL_NO_DRAND48
405 #     define __STL_DEFAULT_CONSTRUCTOR_BUG
406 #   if __BORLANDC__ >= 0x540 /* C++ Builder 4.0 */
407 #     define __STL_CLASS_PARTIAL_SPECIALIZATION
408 #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER
409 #     define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
410 #     define __STL_MEMBER_TEMPLATES
411 #     define __STL_TEMPLATE_FRIENDS
412 #   else
413 #     define __STL_NEED_TYPENAME
414 #     define __STL_LIMITED_DEFAULT_TEMPLATES
415 #     define __SGI_STL_NO_ARROW_OPERATOR
416 #     define __STL_NON_TYPE_TMPL_PARAM_BUG
417 #   endif
418 #   ifdef _CPPUNWIND
419 #     define __STL_USE_EXCEPTIONS
420 #   endif
421 #   ifdef __MT__
422 #     define __STL_WIN32THREADS
423 #   endif
424 # endif
425 
426 # if defined(__STL_NO_BOOL) && !defined(__STL_DONT_USE_BOOL_TYPEDEF)
427     typedef int bool;
428 #   define true 1
429 #   define false 0
430 # endif
431 
432 # ifdef __STL_NEED_TYPENAME
433 #   define typename
434 # endif
435 
436 # ifdef __STL_LIMITED_DEFAULT_TEMPLATES
437 #   define __STL_DEPENDENT_DEFAULT_TMPL(_Tp)
438 # else
439 #   define __STL_DEPENDENT_DEFAULT_TMPL(_Tp) = _Tp
440 # endif
441 
442 # ifdef __STL_MEMBER_TEMPLATE_KEYWORD
443 #   define __STL_TEMPLATE template
444 # else
445 #   define __STL_TEMPLATE
446 # endif
447 
448 # ifdef __STL_NEED_EXPLICIT
449 #   define explicit
450 # endif
451 
452 # ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS
453 #   define __STL_NULL_TMPL_ARGS <>
454 # else
455 #   define __STL_NULL_TMPL_ARGS
456 # endif
457 
458 # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) \
459      || defined (__STL_PARTIAL_SPECIALIZATION_SYNTAX)
460 #   define __STL_TEMPLATE_NULL template<>
461 # else
462 #   define __STL_TEMPLATE_NULL
463 # endif
464 
465 // Use standard-conforming allocators if we have the necessary language
466 // features.  __STL_USE_SGI_ALLOCATORS is a hook so that users can
467 // disable new-style allocators, and continue to use the same kind of
468 // allocators as before, without having to edit library headers.
469 # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && \
470      defined(__STL_MEMBER_TEMPLATES) && \
471      defined(__STL_MEMBER_TEMPLATE_CLASSES) && \
472     !defined(__STL_NO_BOOL) && \
473     !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) && \
474     !defined(__STL_LIMITED_DEFAULT_TEMPLATES) && \
475     !defined(__STL_USE_SGI_ALLOCATORS)
476 #   define __STL_USE_STD_ALLOCATORS
477 # endif
478 
479 # ifndef __STL_DEFAULT_ALLOCATOR
480 #   ifdef __STL_USE_STD_ALLOCATORS
481 #     define __STL_DEFAULT_ALLOCATOR(T) allocator< T >
482 #   else
483 #     define __STL_DEFAULT_ALLOCATOR(T) alloc
484 #   endif
485 # endif
486 
487 // __STL_NO_NAMESPACES is a hook so that users can disable namespaces
488 // without having to edit library headers.  __STL_NO_RELOPS_NAMESPACE is
489 // a hook so that users can disable the std::rel_ops namespace, keeping
490 // the relational operator template in namespace std, without having to
491 // edit library headers.
492 # if defined(__STL_HAS_NAMESPACES) && !defined(__STL_NO_NAMESPACES)
493 #   define __STL_USE_NAMESPACES
494 #   define __STD std
495 #   define __STL_BEGIN_NAMESPACE namespace std {
496 #   define __STL_END_NAMESPACE }
497 #   if defined(__STL_FUNCTION_TMPL_PARTIAL_ORDER) && \
498        !defined(__STL_NO_RELOPS_NAMESPACE)
499 #     define __STL_USE_NAMESPACE_FOR_RELOPS
500 #     define __STL_BEGIN_RELOPS_NAMESPACE namespace std { namespace rel_ops {
501 #     define __STL_END_RELOPS_NAMESPACE } }
502 #     define __STD_RELOPS std::rel_ops
503 #   else /* Use std::rel_ops namespace */
504 #     define __STL_USE_NAMESPACE_FOR_RELOPS
505 #     define __STL_BEGIN_RELOPS_NAMESPACE namespace std {
506 #     define __STL_END_RELOPS_NAMESPACE }
507 #     define __STD_RELOPS std
508 #   endif /* Use std::rel_ops namespace */
509 # else
510 #   define __STD
511 #   define __STL_BEGIN_NAMESPACE
512 #   define __STL_END_NAMESPACE
513 #   undef  __STL_USE_NAMESPACE_FOR_RELOPS
514 #   define __STL_BEGIN_RELOPS_NAMESPACE
515 #   define __STL_END_RELOPS_NAMESPACE
516 #   define __STD_RELOPS
517 #   undef  __STL_USE_NAMESPACES
518 # endif
519 
520 // Some versions of the EDG front end sometimes require an explicit
521 // namespace spec where they shouldn't.  This macro facilitates that.
522 // If the bug becomes irrelevant, then all uses of __STD_QUALIFIER
523 // should be removed.  The 7.3 beta SGI compiler has this bug, but the
524 // MR version is not expected to have it.
525 
526 # if defined(__STL_USE_NAMESPACES) && !defined(__STD_QUALIFIER)
527 #   define __STD_QUALIFIER std::
528 # else
529 #   define __STD_QUALIFIER
530 # endif
531 
532 # ifdef __STL_USE_EXCEPTIONS
533 #   define __STL_TRY try
534 #   define __STL_CATCH_ALL catch(...)
535 #   define __STL_THROW(x) throw x
536 #   define __STL_RETHROW throw
537 #   define __STL_NOTHROW throw()
538 #   define __STL_UNWIND(action) catch(...) { action; throw; }
539 # else
540 #   define __STL_TRY
541 #   define __STL_CATCH_ALL if (false)
542 #   define __STL_THROW(x)
543 #   define __STL_RETHROW
544 #   define __STL_NOTHROW
545 #   define __STL_UNWIND(action)
546 # endif
547 
548 #ifdef __STL_ASSERTIONS
549 # include <stdio.h>
550 # define __stl_assert(expr) \
551     if (!(expr)) { fprintf(stderr, "%s:%d STL assertion failure: %s\n", \
552 			  __FILE__, __LINE__, # expr); abort(); }
553 #else
554 # define __stl_assert(expr)
555 #endif
556 
557 #if defined(__STL_WIN32THREADS) || defined(__STL_SGI_THREADS) \
558     || defined(__STL_PTHREADS)  || defined(__STL_UITHREADS)
559 #   define __STL_THREADS
560 #   define __STL_VOLATILE volatile
561 #else
562 #   define __STL_VOLATILE
563 #endif
564 
565 #if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) \
566     && defined(__STL_MEMBER_TEMPLATES) \
567     && !defined(_STL_NO_CONCEPT_CHECKS)
568 #  define __STL_USE_CONCEPT_CHECKS
569 #endif
570 
571 
572 #endif /* __STL_CONFIG_H */
573 
574 // Local Variables:
575 // mode:C++
576 // End:
577