stl_config.h

00001 /*
00002  *
00003  * Copyright (c) 1994
00004  * Hewlett-Packard Company
00005  *
00006  * Permission to use, copy, modify, distribute and sell this software
00007  * and its documentation for any purpose is hereby granted without fee,
00008  * provided that the above copyright notice appear in all copies and
00009  * that both that copyright notice and this permission notice appear
00010  * in supporting documentation.  Hewlett-Packard Company makes no
00011  * representations about the suitability of this software for any
00012  * purpose.  It is provided "as is" without express or implied warranty.
00013  *
00014  * Copyright (c) 1997
00015  * Silicon Graphics
00016  *
00017  * Permission to use, copy, modify, distribute and sell this software
00018  * and its documentation for any purpose is hereby granted without fee,
00019  * provided that the above copyright notice appear in all copies and
00020  * that both that copyright notice and this permission notice appear
00021  * in supporting documentation.  Silicon Graphics makes no
00022  * representations about the suitability of this software for any
00023  * purpose.  It is provided "as is" without express or implied warranty.
00024  *
00025  */
00026 
00027 #ifndef __STL_CONFIG_H
00028 # define __STL_CONFIG_H
00029 
00030 // Flags:
00031 // * __STL_NO_BOOL: defined if the compiler doesn't have bool as a builtin
00032 //   type.
00033 // * __STL_HAS_WCHAR_T: defined if the compier has wchar_t as a builtin type.
00034 // * __STL_NO_DRAND48: defined if the compiler doesn't have the drand48 
00035 //   function.
00036 // * __STL_STATIC_TEMPLATE_MEMBER_BUG: defined if the compiler can't handle
00037 //   static members of template classes.
00038 // * __STL_STATIC_CONST_INIT_BUG: defined if the compiler can't handle a
00039 //   constant-initializer in the declaration of a static const data member
00040 //   of integer type.  (See section 9.4.2, paragraph 4, of the C++ standard.)
00041 // * __STL_CLASS_PARTIAL_SPECIALIZATION: defined if the compiler supports
00042 //   partial specialization of template classes.
00043 // * __STL_PARTIAL_SPECIALIZATION_SYNTAX: defined if the compiler 
00044 //   supports partial specialization syntax for full specialization of
00045 //   class templates.  (Even if it doesn't actually support partial 
00046 //   specialization itself.)
00047 // * __STL_FUNCTION_TMPL_PARTIAL_ORDER: defined if the compiler supports
00048 //   partial ordering of function templates.  (a.k.a partial specialization
00049 //   of function templates.)
00050 // * __STL_MEMBER_TEMPLATES: defined if the compiler supports template
00051 //   member functions of classes.
00052 // * __STL_MEMBER_TEMPLATE_CLASSES: defined if the compiler supports 
00053 //   nested classes that are member templates of other classes.
00054 // * __STL_TEMPLATE_FRIENDS: defined if the compiler supports templatized
00055 //   friend declarations.
00056 // * __STL_EXPLICIT_FUNCTION_TMPL_ARGS: defined if the compiler 
00057 //   supports calling a function template by providing its template
00058 //   arguments explicitly.
00059 // * __STL_LIMITED_DEFAULT_TEMPLATES: defined if the compiler is unable
00060 //   to handle default template parameters that depend on previous template
00061 //   parameters.
00062 // * __STL_NON_TYPE_TMPL_PARAM_BUG: defined if the compiler has trouble with
00063 //   function template argument deduction for non-type template parameters.
00064 // * __SGI_STL_NO_ARROW_OPERATOR: defined if the compiler is unable
00065 //   to support the -> operator for iterators.
00066 // * __STL_DEFAULT_CONSTRUCTOR_BUG: defined if T() does not work properly
00067 //   when T is a builtin type.
00068 // * __STL_USE_EXCEPTIONS: defined if the compiler (in the current compilation
00069 //   mode) supports exceptions.
00070 // * __STL_USE_NAMESPACES: defined if the compiler has the necessary
00071 //   support for namespaces.
00072 // * __STL_NO_EXCEPTION_HEADER: defined if the compiler does not have a
00073 //   standard-conforming header <exception>.
00074 // * __STL_NO_BAD_ALLOC: defined if the compiler does not have a <new>
00075 //   header, or if <new> does not contain a bad_alloc class.  If a bad_alloc
00076 //   class exists, it is assumed to be in namespace std.
00077 // * __STL_SGI_THREADS: defined if this is being compiled for an SGI IRIX
00078 //   system in multithreaded mode, using native SGI threads instead of 
00079 //   pthreads.
00080 // * __STL_WIN32THREADS: defined if this is being compiled on a WIN32
00081 //   compiler in multithreaded mode.
00082 // * __STL_PTHREADS: defined if we should use portable pthreads
00083 //   synchronization.
00084 // * __STL_UITHREADS: defined if we should use UI / solaris / UnixWare threads
00085 //   synchronization.  UIthreads are similar to pthreads, but are based 
00086 //   on an earlier version of the Posix threads standard.
00087 // * __STL_LONG_LONG if the compiler has long long and unsigned long long
00088 //   types.  (They're not in the C++ standard, but they are expected to be 
00089 //   included in the forthcoming C9X standard.)
00090 // * __STL_THREADS is defined if thread safety is needed.
00091 // * __STL_VOLATILE is defined to be "volatile" if threads are being
00092 //   used, and the empty string otherwise.
00093 // * __STL_USE_CONCEPT_CHECKS enables some extra compile-time error
00094 //   checking to make sure that user-defined template arguments satisfy
00095 //   all of the appropriate requirements.  This may result in more
00096 //   comprehensible error messages.  It incurs no runtime overhead.  This 
00097 //   feature requires member templates and partial specialization.
00098 // * __STL_NO_USING_CLAUSE_IN_CLASS: The compiler does not handle "using"
00099 //   clauses inside of class definitions.
00100 // * __STL_NO_FRIEND_TEMPLATE_CLASS: The compiler does not handle friend
00101 //   declaractions where the friend is a template class.
00102 // * __STL_NO_FUNCTION_PTR_IN_CLASS_TEMPLATE: The compiler does not
00103 //   support the use of a function pointer type as the argument
00104 //   for a template.
00105 // * __STL_MEMBER_TEMPLATE_KEYWORD: standard C++ requires the template
00106 //   keyword in a few new places (14.2.4).  This flag is set for
00107 //   compilers that support (and require) this usage.
00108 
00109 
00110 // User-settable macros that control compilation:
00111 // * __STL_USE_SGI_ALLOCATORS: if defined, then the STL will use older
00112 //   SGI-style allocators, instead of standard-conforming allocators,
00113 //   even if the compiler supports all of the language features needed
00114 //   for standard-conforming allocators.
00115 // * __STL_NO_NAMESPACES: if defined, don't put the library in namespace
00116 //   std, even if the compiler supports namespaces.
00117 // * __STL_NO_RELOPS_NAMESPACE: if defined, don't put the relational
00118 //   operator templates (>, <=. >=, !=) in namespace std::rel_ops, even
00119 //   if the compiler supports namespaces and partial ordering of
00120 //   function templates.
00121 // * __STL_ASSERTIONS: if defined, then enable runtime checking through the
00122 //   __stl_assert macro.
00123 // * _PTHREADS: if defined, use Posix threads for multithreading support.
00124 // * _UITHREADS:if defined, use SCO/Solaris/UI threads for multithreading 
00125 //   support
00126 // * _NOTHREADS: if defined, don't use any multithreading support.  
00127 // * _STL_NO_CONCEPT_CHECKS: if defined, disables the error checking that
00128 //   we get from __STL_USE_CONCEPT_CHECKS.
00129 // * __STL_USE_NEW_IOSTREAMS: if defined, then the STL will use new,
00130 //   standard-conforming iostreams (e.g. the <iosfwd> header).  If not
00131 //   defined, the STL will use old cfront-style iostreams (e.g. the
00132 //   <iostream.h> header).
00133 
00134 // Other macros defined by this file:
00135 
00136 // * bool, true, and false, if __STL_NO_BOOL is defined.
00137 // * typename, as a null macro if it's not already a keyword.
00138 // * explicit, as a null macro if it's not already a keyword.
00139 // * namespace-related macros (__STD, __STL_BEGIN_NAMESPACE, etc.)
00140 // * exception-related macros (__STL_TRY, __STL_UNWIND, etc.)
00141 // * __stl_assert, either as a test or as a null macro, depending on
00142 //   whether or not __STL_ASSERTIONS is defined.
00143 
00144 # if defined(_PTHREADS) && !defined(_NOTHREADS)
00145 #     define __STL_PTHREADS
00146 # endif
00147 
00148 # if defined(_UITHREADS) && !defined(_PTHREADS) && !defined(_NOTHREADS)
00149 #     define __STL_UITHREADS
00150 # endif
00151 
00152 # if defined(__sgi) && !defined(__GNUC__)
00153 #   include <standards.h>
00154 #   if !defined(_BOOL)
00155 #     define __STL_NO_BOOL
00156 #   endif
00157 #   if defined(_MIPS_SIM) && _MIPS_SIM == _ABIO32
00158 #     define __STL_STATIC_CONST_INIT_BUG
00159 #   endif
00160 #   if defined(_WCHAR_T_IS_KEYWORD)
00161 #     define __STL_HAS_WCHAR_T 
00162 #   endif
00163 #   if !defined(_TYPENAME_IS_KEYWORD)
00164 #     define __STL_NEED_TYPENAME
00165 #   endif
00166 #   ifdef _PARTIAL_SPECIALIZATION_OF_CLASS_TEMPLATES
00167 #     define __STL_CLASS_PARTIAL_SPECIALIZATION
00168 #   endif
00169 #   if (_COMPILER_VERSION >= 730) && defined(_MIPS_SIM) && _MIPS_SIM != _ABIO32
00170 #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER
00171 #   endif
00172 #   ifdef _MEMBER_TEMPLATES
00173 #     define __STL_MEMBER_TEMPLATES
00174 #     define __STL_TEMPLATE_FRIENDS
00175 #     define __STL_MEMBER_TEMPLATE_CLASSES
00176 #   endif
00177 #   if defined(_MEMBER_TEMPLATE_KEYWORD)
00178 #     define __STL_MEMBER_TEMPLATE_KEYWORD
00179 #   endif
00180 #   if defined(_STANDARD_C_PLUS_PLUS)
00181 #     define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
00182 #   endif
00183 #   if (_COMPILER_VERSION >= 730) && defined(_MIPS_SIM) && _MIPS_SIM != _ABIO32
00184 #     define __STL_MEMBER_TEMPLATE_KEYWORD
00185 #   endif
00186 #   if COMPILER_VERSION < 720 || (defined(_MIPS_SIM) && _MIPS_SIM == _ABIO32)
00187 #     define __STL_DEFAULT_CONSTRUCTOR_BUG
00188 #   endif
00189 #   if !defined(_EXPLICIT_IS_KEYWORD)
00190 #     define __STL_NEED_EXPLICIT
00191 #   endif
00192 #   ifdef __EXCEPTIONS
00193 #     define __STL_USE_EXCEPTIONS
00194 #   endif
00195 #   if (_COMPILER_VERSION >= 721) && defined(_NAMESPACES)
00196 #     define __STL_HAS_NAMESPACES
00197 #   endif 
00198 #   if (_COMPILER_VERSION < 721) || \
00199     !defined(__STL_HAS_NAMESPACES) || defined(__STL_NO_NAMESPACES)
00200 #     define __STL_NO_EXCEPTION_HEADER
00201 #   endif
00202 #   if _COMPILER_VERSION < 730 || !defined(_STANDARD_C_PLUS_PLUS) || \
00203       !defined(_NAMESPACES)
00204 #     define __STL_NO_BAD_ALLOC
00205 #   endif
00206 #   if !defined(_NOTHREADS) && !defined(__STL_PTHREADS)
00207 #     define __STL_SGI_THREADS
00208 #   endif
00209 #   if defined(_LONGLONG) && defined(_SGIAPI) && _SGIAPI
00210 #     define __STL_LONG_LONG
00211 #   endif
00212 #   if _COMPILER_VERSION >= 730 && defined(_STANDARD_C_PLUS_PLUS)
00213 #     define __STL_USE_NEW_IOSTREAMS
00214 #   endif
00215 #   if _COMPILER_VERSION >= 730 && defined(_STANDARD_C_PLUS_PLUS)
00216 #     define __STL_CAN_THROW_RANGE_ERRORS
00217 #   endif
00218 #   if _COMPILER_VERSION >= 730 && defined(_STANDARD_C_PLUS_PLUS)
00219 #     define __SGI_STL_USE_AUTO_PTR_CONVERSIONS
00220 #   endif
00221 # endif
00222 
00223 
00224 /*
00225  * Jochen Schlick '1999  - added new #defines (__STL)_UITHREADS (for 
00226  *                         providing SCO / Solaris / UI thread support)
00227  *                       - added the necessary defines for the SCO UDK 7 
00228  *                         compiler (and its template friend behavior)
00229  *                       - all UDK7 specific STL changes are based on the 
00230  *                         macro __USLC__ being defined
00231  */
00232 // SCO UDK 7 compiler (UnixWare 7x, OSR 5, UnixWare 2x)
00233 # if defined(__USLC__)
00234 #     define __STL_HAS_WCHAR_T 
00235 #     define __STL_CLASS_PARTIAL_SPECIALIZATION
00236 #     define __STL_PARTIAL_SPECIALIZATION_SYNTAX
00237 #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER
00238 #     define __STL_MEMBER_TEMPLATES
00239 #     define __STL_MEMBER_TEMPLATE_CLASSES
00240 #     define __STL_USE_EXCEPTIONS
00241 #     define __STL_HAS_NAMESPACES
00242 #     define __STL_USE_NAMESPACES
00243 #     define __STL_LONG_LONG
00244 #     if defined(_REENTRANT)
00245 #           define _UITHREADS     /* if      UnixWare < 7.0.1 */
00246 #           define __STL_UITHREADS
00247 //   use the following defines instead of the UI threads defines when
00248 //   you want to use POSIX threads
00249 //#         define _PTHREADS      /* only if UnixWare >=7.0.1 */
00250 //#         define __STL_PTHREADS
00251 #     endif
00252 # endif
00253 
00254 
00255 
00256 # ifdef __GNUC__
00257 #   if __GNUC__ == 2 && __GNUC_MINOR__ <= 7
00258 #     define __STL_STATIC_TEMPLATE_MEMBER_BUG
00259 #   endif
00260 #   if __GNUC__ < 2 
00261 #     define __STL_NEED_TYPENAME
00262 #     define __STL_NEED_EXPLICIT
00263 #   endif
00264 #   if __GNUC__ == 2 && __GNUC_MINOR__ <= 8
00265 #     define __STL_NO_EXCEPTION_HEADER
00266 #     define __STL_NO_BAD_ALLOC
00267 #   endif
00268 #   if __GNUC__ == 2 && __GNUC_MINOR__ >= 8
00269 #     define __STL_CLASS_PARTIAL_SPECIALIZATION
00270 #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER
00271 #     define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
00272 #     define __STL_MEMBER_TEMPLATES
00273 #     define __STL_CAN_THROW_RANGE_ERRORS
00274       //    g++ 2.8.1 supports member template functions, but not member
00275       //    template nested classes.
00276 #     if __GNUC_MINOR__ >= 9
00277 #       define __STL_MEMBER_TEMPLATE_CLASSES
00278 #       define __STL_TEMPLATE_FRIENDS
00279 #       define __SGI_STL_USE_AUTO_PTR_CONVERSIONS
00280 #       define __STL_HAS_NAMESPACES
00281 //#       define __STL_USE_NEW_IOSTREAMS
00282 #     endif
00283 #   endif
00284 #   define __STL_DEFAULT_CONSTRUCTOR_BUG
00285 #   ifdef __EXCEPTIONS
00286 #     define __STL_USE_EXCEPTIONS
00287 #   endif
00288 #   ifdef _REENTRANT
00289 #     define __STL_PTHREADS
00290 #   endif
00291 #   if (__GNUC__ < 2) || (__GNUC__ == 2 && __GNUC_MINOR__ < 95)
00292 #     define __STL_NO_FUNCTION_PTR_IN_CLASS_TEMPLATE
00293 #   endif
00294 # endif
00295 
00296 # if defined(__SUNPRO_CC) 
00297 #   define __STL_NO_BOOL
00298 #   define __STL_NEED_TYPENAME
00299 #   define __STL_NEED_EXPLICIT
00300 #   define __STL_USE_EXCEPTIONS
00301 #   ifdef _REENTRANT
00302 #     define __STL_PTHREADS
00303 #   endif
00304 #   define __SGI_STL_NO_ARROW_OPERATOR
00305 #   define __STL_PARTIAL_SPECIALIZATION_SYNTAX
00306 #   define __STL_NO_EXCEPTION_HEADER
00307 #   define __STL_NO_BAD_ALLOC
00308 # endif
00309 
00310 # if defined(__COMO__)
00311 #   define __STL_MEMBER_TEMPLATES
00312 #   define __STL_MEMBER_TEMPLATE_CLASSES
00313 #   define __STL_TEMPLATE_FRIENDS
00314 #   define __STL_CLASS_PARTIAL_SPECIALIZATION
00315 #   define __STL_USE_EXCEPTIONS
00316 #   define __STL_HAS_NAMESPACES
00317 # endif
00318 
00319 // Intel compiler, which uses the EDG front end.
00320 # if defined(__ICL)
00321 #   define __STL_LONG_LONG 
00322 #   define __STL_MEMBER_TEMPLATES
00323 #   define __STL_MEMBER_TEMPLATE_CLASSES
00324 #   define __STL_TEMPLATE_FRIENDS
00325 #   define __STL_FUNCTION_TMPL_PARTIAL_ORDER
00326 #   define __STL_CLASS_PARTIAL_SPECIALIZATION
00327 #   define __STL_NO_DRAND48
00328 #   define __STL_HAS_NAMESPACES
00329 #   define __STL_USE_EXCEPTIONS
00330 #   define __STL_MEMBER_TEMPLATE_KEYWORD
00331 #   ifdef _CPPUNWIND
00332 #     define __STL_USE_EXCEPTIONS
00333 #   endif
00334 #   ifdef _MT
00335 #     define __STL_WIN32THREADS
00336 #   endif
00337 # endif
00338 
00339 // Mingw32, egcs compiler using the Microsoft C runtime
00340 # if defined(__MINGW32__)
00341 #   define __STL_NO_DRAND48
00342 #   ifdef _MT
00343 #     define __STL_WIN32THREADS
00344 #   endif
00345 # endif
00346 
00347 // Cygwin32, egcs compiler on MS Windows
00348 # if defined(__CYGWIN__)
00349 #   define __STL_NO_DRAND48
00350 # endif
00351 
00352 
00353 
00354 // Microsoft compiler.
00355 # if defined(_MSC_VER) && !defined(__ICL) && !defined(__MWERKS__)
00356 #   define __STL_NO_DRAND48
00357 #   define __STL_STATIC_CONST_INIT_BUG
00358 //#  if _MSC_VER < 1200
00359 #   define __STL_NEED_TYPENAME
00360 //#  endif
00361 #   define __STL_NO_USING_CLAUSE_IN_CLASS
00362 #   define __STL_NO_FRIEND_TEMPLATE_CLASS
00363 #   if _MSC_VER < 1100  /* 1000 is version 4.0, 1100 is 5.0, 1200 is 6.0. */
00364 #     define __STL_NEED_EXPLICIT
00365 #     define __STL_NO_BOOL
00366 #     define __STL_NO_BAD_ALLOC
00367 #   endif
00368 #   if _MSC_VER > 1000
00369 #     ifndef UNDER_CE
00370 #       include <yvals.h>
00371 #     endif
00372 #     define __STL_DONT_USE_BOOL_TYPEDEF
00373 #   endif
00374 #   define __STL_NON_TYPE_TMPL_PARAM_BUG
00375 #   define __SGI_STL_NO_ARROW_OPERATOR
00376 #   define __STL_DEFAULT_CONSTRUCTOR_BUG
00377 #   ifdef _CPPUNWIND
00378 #     define __STL_USE_EXCEPTIONS
00379 #   endif
00380 #   ifdef UNDER_CE
00381 #     undef __STL_USE_EXCEPTIONS //Make sure no exception syntax used
00382 #   endif
00383 #   ifdef _MT
00384 #     define __STL_WIN32THREADS
00385 #   endif
00386 #   if _MSC_VER >= 1200
00387 #     define __STL_PARTIAL_SPECIALIZATION_SYNTAX
00388 #     define __STL_HAS_NAMESPACES
00389 #     define __STL_CAN_THROW_RANGE_ERRORS
00390 #     define NOMINMAX
00391 #     undef min
00392 #     undef max
00393 // disable warning 'initializers put in unrecognized initialization area'
00394 #     pragma warning ( disable : 4075 )
00395 // disable warning 'empty controlled statement found'
00396 #     pragma warning ( disable : 4390 )
00397 // disable warning 'debug symbol greater than 255 chars'
00398 #     pragma warning ( disable : 4786 )
00399 #   endif
00400 #   if (_MSC_VER < 1100)
00401 #     define __STL_NO_EXCEPTION_HEADER
00402 #     define __STL_NO_BAD_ALLOC
00403 #   endif
00404 #   if defined UNDER_CE
00405 #     define __STL_NO_EXCEPTION_HEADER
00406 #   endif
00407          // Because of a Microsoft front end bug, we must not provide a
00408     // namespace qualifier when declaring a friend function.
00409 #   define __STD_QUALIFIER
00410 # endif
00411 
00412 # if defined(__BORLANDC__)
00413 #     define __STL_NO_BAD_ALLOC
00414 #     define __STL_NO_DRAND48
00415 #     define __STL_DEFAULT_CONSTRUCTOR_BUG
00416 #   if __BORLANDC__ >= 0x540 /* C++ Builder 4.0 */
00417 #     define __STL_CLASS_PARTIAL_SPECIALIZATION
00418 #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER
00419 #     define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
00420 #     define __STL_MEMBER_TEMPLATES
00421 #     define __STL_TEMPLATE_FRIENDS
00422 #   else
00423 #     define __STL_NEED_TYPENAME
00424 #     define __STL_LIMITED_DEFAULT_TEMPLATES
00425 #     define __SGI_STL_NO_ARROW_OPERATOR
00426 #     define __STL_NON_TYPE_TMPL_PARAM_BUG
00427 #   endif
00428 #   ifdef _CPPUNWIND
00429 #     define __STL_USE_EXCEPTIONS
00430 #   endif
00431 #   ifdef __MT__
00432 #     define __STL_WIN32THREADS
00433 #   endif
00434 # endif
00435 
00436 # if defined(__STL_NO_BOOL) && !defined(__STL_DONT_USE_BOOL_TYPEDEF)
00437     typedef int bool;
00438 #   define true 1
00439 #   define false 0
00440 # endif
00441 
00442 # ifdef __STL_NEED_TYPENAME
00443 #   define typename
00444 # endif
00445 
00446 # ifdef __STL_LIMITED_DEFAULT_TEMPLATES
00447 #   define __STL_DEPENDENT_DEFAULT_TMPL(_Tp)
00448 # else
00449 #   define __STL_DEPENDENT_DEFAULT_TMPL(_Tp) = _Tp
00450 # endif
00451 
00452 # ifdef __STL_MEMBER_TEMPLATE_KEYWORD
00453 #   define __STL_TEMPLATE template
00454 # else
00455 #   define __STL_TEMPLATE
00456 # endif
00457 
00458 # ifdef __STL_NEED_EXPLICIT
00459 #   define explicit
00460 # endif
00461 
00462 # ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS
00463 #   define __STL_NULL_TMPL_ARGS <>
00464 # else
00465 #   define __STL_NULL_TMPL_ARGS
00466 # endif
00467 
00468 # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) \
00469      || defined (__STL_PARTIAL_SPECIALIZATION_SYNTAX)
00470 #   define __STL_TEMPLATE_NULL template<>
00471 # else
00472 #   define __STL_TEMPLATE_NULL
00473 # endif
00474 
00475 // Use standard-conforming allocators if we have the necessary language
00476 // features.  __STL_USE_SGI_ALLOCATORS is a hook so that users can 
00477 // disable new-style allocators, and continue to use the same kind of
00478 // allocators as before, without having to edit library headers.
00479 # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && \
00480      defined(__STL_MEMBER_TEMPLATES) && \
00481      defined(__STL_MEMBER_TEMPLATE_CLASSES) && \
00482     !defined(__STL_NO_BOOL) && \
00483     !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) && \
00484     !defined(__STL_LIMITED_DEFAULT_TEMPLATES) && \
00485     !defined(__STL_USE_SGI_ALLOCATORS) 
00486 #   define __STL_USE_STD_ALLOCATORS
00487 # endif
00488 
00489 # ifndef __STL_DEFAULT_ALLOCATOR
00490 #   ifdef __STL_USE_STD_ALLOCATORS
00491 #     define __STL_DEFAULT_ALLOCATOR(T) allocator< T >
00492 #   else
00493 #     define __STL_DEFAULT_ALLOCATOR(T) alloc
00494 #   endif
00495 # endif
00496 
00497 // __STL_NO_NAMESPACES is a hook so that users can disable namespaces
00498 // without having to edit library headers.  __STL_NO_RELOPS_NAMESPACE is
00499 // a hook so that users can disable the std::rel_ops namespace, keeping 
00500 // the relational operator template in namespace std, without having to 
00501 // edit library headers.
00502 # if defined(__STL_HAS_NAMESPACES) && !defined(__STL_NO_NAMESPACES)
00503 #   define __STL_USE_NAMESPACES
00504 #   define __STD std
00505 #   define __STL_BEGIN_NAMESPACE namespace std {
00506 #   define __STL_END_NAMESPACE }
00507 #   if defined(__STL_FUNCTION_TMPL_PARTIAL_ORDER) && \
00508        !defined(__STL_NO_RELOPS_NAMESPACE)
00509 #     define __STL_USE_NAMESPACE_FOR_RELOPS
00510 #     define __STL_BEGIN_RELOPS_NAMESPACE namespace std { namespace rel_ops {
00511 #     define __STL_END_RELOPS_NAMESPACE } }
00512 #     define __STD_RELOPS std::rel_ops
00513 #   else /* Use std::rel_ops namespace */
00514 #     define __STL_USE_NAMESPACE_FOR_RELOPS
00515 #     define __STL_BEGIN_RELOPS_NAMESPACE namespace std {
00516 #     define __STL_END_RELOPS_NAMESPACE }
00517 #     define __STD_RELOPS std
00518 #   endif /* Use std::rel_ops namespace */
00519 # else
00520 #   define __STD 
00521 #   define __STL_BEGIN_NAMESPACE 
00522 #   define __STL_END_NAMESPACE 
00523 #   undef  __STL_USE_NAMESPACE_FOR_RELOPS
00524 #   define __STL_BEGIN_RELOPS_NAMESPACE 
00525 #   define __STL_END_RELOPS_NAMESPACE 
00526 #   define __STD_RELOPS 
00527 #   undef  __STL_USE_NAMESPACES
00528 # endif
00529 
00530 // Some versions of the EDG front end sometimes require an explicit
00531 // namespace spec where they shouldn't.  This macro facilitates that.
00532 // If the bug becomes irrelevant, then all uses of __STD_QUALIFIER
00533 // should be removed.  The 7.3 beta SGI compiler has this bug, but the
00534 // MR version is not expected to have it.
00535 
00536 # if defined(__STL_USE_NAMESPACES) && !defined(__STD_QUALIFIER)
00537 #   define __STD_QUALIFIER std::
00538 # else
00539 #   define __STD_QUALIFIER
00540 # endif
00541 
00542 # ifdef __STL_USE_EXCEPTIONS
00543 #   define __STL_TRY try
00544 #   define __STL_CATCH_ALL catch(...)
00545 #   define __STL_THROW(x) throw x
00546 #   define __STL_RETHROW throw
00547 #   define __STL_NOTHROW throw()
00548 #   define __STL_UNWIND(action) catch(...) { action; throw; }
00549 # else
00550 #   define __STL_TRY 
00551 #   define __STL_CATCH_ALL if (false)
00552 #   define __STL_THROW(x) 
00553 #   define __STL_RETHROW 
00554 #   define __STL_NOTHROW 
00555 #   define __STL_UNWIND(action) 
00556 # endif
00557 
00558 #ifdef __STL_ASSERTIONS
00559 #ifndef UNDER_CE
00560 # include <stdio.h>
00561 # define __stl_assert(expr) \
00562     if (!(expr)) { fprintf(stderr, "%s:%d STL assertion failure: %s\n", \
00563                           __FILE__, __LINE__, # expr); abort(); }
00564 #else //UNDER_CE
00565 #include <wce_defs.h>
00566 # define __stl_assert(expr) assert(expr);
00567 #endif //UNDER_CE
00568 #else
00569 # define __stl_assert(expr)
00570 #endif
00571 
00572 #if defined(__STL_WIN32THREADS) || defined(__STL_SGI_THREADS) \
00573     || defined(__STL_PTHREADS)  || defined(__STL_UITHREADS)
00574 #   define __STL_THREADS
00575 #   define __STL_VOLATILE volatile
00576 #else
00577 #   define __STL_VOLATILE
00578 #endif
00579 
00580 #if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) \
00581     && defined(__STL_MEMBER_TEMPLATES) \
00582     && !defined(_STL_NO_CONCEPT_CHECKS)
00583 #  define __STL_USE_CONCEPT_CHECKS
00584 #endif
00585 
00586 
00587 #endif /* __STL_CONFIG_H */
00588 
00589 // Local Variables:
00590 // mode:C++
00591 // End:

Generated on Mon Jun 5 10:20:44 2006 for Intelligence.kdevelop by  doxygen 1.4.6