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