Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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 included
  89. //   in the C99 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. #   define __STL_HAS_WCHAR_T
  258. #   define __STL_MEMBER_TEMPLATES
  259. #   define __STL_MEMBER_TEMPLATE_CLASSES
  260. #   define __STL_TEMPLATE_FRIENDS
  261. #   define __STL_CLASS_PARTIAL_SPECIALIZATION
  262. #   define __STL_PARTIAL_SPECIALIZATION_SYNTAX
  263. #   define __STL_FUNCTION_TMPL_PARTIAL_ORDER
  264. #   define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
  265. #   define __SGI_STL_USE_AUTO_PTR_CONVERSIONS
  266. #   define __STL_HAS_NAMESPACES
  267. #   define __STL_USE_NAMESPACES
  268. #   ifdef __EXCEPTIONS
  269. #     define __STL_USE_EXCEPTIONS
  270. #   endif
  271. #   define __STL_THROW_RANGE_ERRORS
  272. #   define __STL_CAN_THROW_RANGE_ERRORS
  273. #   define __STL_USE_STD_ALLOCATORS
  274. #   define __USE_MALLOC // As the "underlying allocator"
  275. //#     define __STL_USE_NEW_IOSTREAMS //990209 bkoz--use standard .h includes.
  276. #   ifdef _REENTRANT
  277. #     define __STL_THREADS
  278. #   endif
  279. #   ifdef _PTHREADS
  280. #     define __STL_PTHREADS
  281. #   endif
  282. #   ifndef __STRICT_ANSI__
  283. #     define __STL_LONG_LONG
  284. #   endif
  285. #   if (__GNUC__ < 2) || (__GNUC__ == 2 && __GNUC_MINOR__ < 95)
  286. #     define __STL_NO_FUNCTION_PTR_IN_CLASS_TEMPLATE
  287. #   endif
  288. # endif
  289.  
  290. # if defined(__SUNPRO_CC)
  291. #   define __STL_NO_BOOL
  292. #   define __STL_NEED_TYPENAME
  293. #   define __STL_NEED_EXPLICIT
  294. #   define __STL_USE_EXCEPTIONS
  295. #   ifdef _REENTRANT
  296. #     define __STL_PTHREADS
  297. #   endif
  298. #   define __SGI_STL_NO_ARROW_OPERATOR
  299. #   define __STL_PARTIAL_SPECIALIZATION_SYNTAX
  300. #   define __STL_NO_EXCEPTION_HEADER
  301. #   define __STL_NO_BAD_ALLOC
  302. # endif
  303.  
  304. # if defined(__COMO__)
  305. #   define __STL_MEMBER_TEMPLATES
  306. #   define __STL_MEMBER_TEMPLATE_CLASSES
  307. #   define __STL_TEMPLATE_FRIENDS
  308. #   define __STL_CLASS_PARTIAL_SPECIALIZATION
  309. #   define __STL_USE_EXCEPTIONS
  310. #   define __STL_HAS_NAMESPACES
  311. # endif
  312.  
  313. // Intel compiler, which uses the EDG front end.
  314. # if defined(__ICL)
  315. #   define __STL_LONG_LONG
  316. #   define __STL_MEMBER_TEMPLATES
  317. #   define __STL_MEMBER_TEMPLATE_CLASSES
  318. #   define __STL_TEMPLATE_FRIENDS
  319. #   define __STL_FUNCTION_TMPL_PARTIAL_ORDER
  320. #   define __STL_CLASS_PARTIAL_SPECIALIZATION
  321. #   define __STL_NO_DRAND48
  322. #   define __STL_HAS_NAMESPACES
  323. #   define __STL_USE_EXCEPTIONS
  324. #   define __STL_MEMBER_TEMPLATE_KEYWORD
  325. #   ifdef _CPPUNWIND
  326. #     define __STL_USE_EXCEPTIONS
  327. #   endif
  328. #   ifdef _MT
  329. #     define __STL_WIN32THREADS
  330. #   endif
  331. # endif
  332.  
  333. // Mingw32, GCC compiler using the Microsoft C runtime
  334. # if defined(__MINGW32__)
  335. #   define __STL_NO_DRAND48
  336. #   ifdef _MT
  337. #     define __STL_WIN32THREADS
  338. #   endif
  339. # endif
  340.  
  341. // Cygwin32, GCC compiler on MS Windows
  342. # if defined(__CYGWIN__)
  343. #   define __STL_NO_DRAND48
  344. # endif
  345.  
  346.  
  347.  
  348. // Microsoft compiler.
  349. # if defined(_MSC_VER) && !defined(__ICL) && !defined(__MWERKS__)
  350. #   define __STL_NO_DRAND48
  351. #   define __STL_STATIC_CONST_INIT_BUG
  352. #   define __STL_NEED_TYPENAME
  353. #   define __STL_NO_USING_CLAUSE_IN_CLASS
  354. #   define __STL_NO_FRIEND_TEMPLATE_CLASS
  355. #   if _MSC_VER < 1100  /* 1000 is version 4.0, 1100 is 5.0, 1200 is 6.0. */
  356. #     define __STL_NEED_EXPLICIT
  357. #     define __STL_NO_BOOL
  358. #     define __STL_NO_BAD_ALLOC
  359. #   endif
  360. #   if _MSC_VER > 1000
  361. #     include <yvals.h>
  362. #     define __STL_DONT_USE_BOOL_TYPEDEF
  363. #   endif
  364. #   define __STL_NON_TYPE_TMPL_PARAM_BUG
  365. #   define __SGI_STL_NO_ARROW_OPERATOR
  366. #   define __STL_DEFAULT_CONSTRUCTOR_BUG
  367. #   ifdef _CPPUNWIND
  368. #     define __STL_USE_EXCEPTIONS
  369. #   endif
  370. #   ifdef _MT
  371. #     define __STL_WIN32THREADS
  372. #   endif
  373. #   if _MSC_VER >= 1200
  374. #     define __STL_PARTIAL_SPECIALIZATION_SYNTAX
  375. #     define __STL_HAS_NAMESPACES
  376. #     define __STL_CAN_THROW_RANGE_ERRORS
  377. #     define NOMINMAX
  378. #     undef min
  379. #     undef max
  380. // disable warning 'initializers put in unrecognized initialization area'
  381. #     pragma warning ( disable : 4075 )
  382. // disable warning 'empty controlled statement found'
  383. #     pragma warning ( disable : 4390 )
  384. // disable warning 'debug symbol greater than 255 chars'
  385. #     pragma warning ( disable : 4786 )
  386. #   endif
  387. #   if _MSC_VER < 1100
  388. #     define __STL_NO_EXCEPTION_HEADER
  389. #     define __STL_NO_BAD_ALLOC
  390. #   endif
  391.     // Because of a Microsoft front end bug, we must not provide a
  392.     // namespace qualifier when declaring a friend function.
  393. #   define __STD_QUALIFIER
  394. # endif
  395.  
  396. # if defined(__BORLANDC__)
  397. #     define __STL_NO_BAD_ALLOC
  398. #     define __STL_NO_DRAND48
  399. #     define __STL_DEFAULT_CONSTRUCTOR_BUG
  400. #   if __BORLANDC__ >= 0x540 /* C++ Builder 4.0 */
  401. #     define __STL_CLASS_PARTIAL_SPECIALIZATION
  402. #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER
  403. #     define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
  404. #     define __STL_MEMBER_TEMPLATES
  405. #     define __STL_TEMPLATE_FRIENDS
  406. #   else
  407. #     define __STL_NEED_TYPENAME
  408. #     define __STL_LIMITED_DEFAULT_TEMPLATES
  409. #     define __SGI_STL_NO_ARROW_OPERATOR
  410. #     define __STL_NON_TYPE_TMPL_PARAM_BUG
  411. #   endif
  412. #   ifdef _CPPUNWIND
  413. #     define __STL_USE_EXCEPTIONS
  414. #   endif
  415. #   ifdef __MT__
  416. #     define __STL_WIN32THREADS
  417. #   endif
  418. # endif
  419.  
  420. # if defined(__STL_NO_BOOL) && !defined(__STL_DONT_USE_BOOL_TYPEDEF)
  421.     typedef int bool;
  422. #   define true 1
  423. #   define false 0
  424. # endif
  425.  
  426. # ifdef __STL_NEED_TYPENAME
  427. #   define typename
  428. # endif
  429.  
  430. # ifdef __STL_LIMITED_DEFAULT_TEMPLATES
  431. #   define __STL_DEPENDENT_DEFAULT_TMPL(_Tp)
  432. # else
  433. #   define __STL_DEPENDENT_DEFAULT_TMPL(_Tp) = _Tp
  434. # endif
  435.  
  436. # ifdef __STL_MEMBER_TEMPLATE_KEYWORD
  437. #   define __STL_TEMPLATE template
  438. # else
  439. #   define __STL_TEMPLATE
  440. # endif
  441.  
  442. # ifdef __STL_NEED_EXPLICIT
  443. #   define explicit
  444. # endif
  445.  
  446. # ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS
  447. #   define __STL_NULL_TMPL_ARGS <>
  448. # else
  449. #   define __STL_NULL_TMPL_ARGS
  450. # endif
  451.  
  452. # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) \
  453.      || defined (__STL_PARTIAL_SPECIALIZATION_SYNTAX)
  454. #   define __STL_TEMPLATE_NULL template<>
  455. # else
  456. #   define __STL_TEMPLATE_NULL
  457. # endif
  458.  
  459. // Use standard-conforming allocators if we have the necessary language
  460. // features.  __STL_USE_SGI_ALLOCATORS is a hook so that users can
  461. // disable new-style allocators, and continue to use the same kind of
  462. // allocators as before, without having to edit library headers.
  463. # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && \
  464.      defined(__STL_MEMBER_TEMPLATES) && \
  465.      defined(__STL_MEMBER_TEMPLATE_CLASSES) && \
  466.     !defined(__STL_NO_BOOL) && \
  467.     !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) && \
  468.     !defined(__STL_LIMITED_DEFAULT_TEMPLATES) && \
  469.     !defined(__STL_USE_SGI_ALLOCATORS)
  470. #   define __STL_USE_STD_ALLOCATORS
  471. # endif
  472.  
  473. # ifndef __STL_DEFAULT_ALLOCATOR
  474. #   ifdef __STL_USE_STD_ALLOCATORS
  475. #     define __STL_DEFAULT_ALLOCATOR(T) allocator< T >
  476. #   else
  477. #     define __STL_DEFAULT_ALLOCATOR(T) alloc
  478. #   endif
  479. # endif
  480.  
  481. // __STL_NO_NAMESPACES is a hook so that users can disable namespaces
  482. // without having to edit library headers.  __STL_NO_RELOPS_NAMESPACE is
  483. // a hook so that users can disable the std::rel_ops namespace, keeping
  484. // the relational operator template in namespace std, without having to
  485. // edit library headers.
  486. # if defined(__STL_HAS_NAMESPACES) && !defined(__STL_NO_NAMESPACES)
  487. #   define __STL_USE_NAMESPACES
  488. #   define __STD std
  489. #   define __STL_BEGIN_NAMESPACE namespace std {
  490. #   define __STL_END_NAMESPACE }
  491. #   if defined(__STL_FUNCTION_TMPL_PARTIAL_ORDER) && \
  492.        !defined(__STL_NO_RELOPS_NAMESPACE)
  493. #     define __STL_USE_NAMESPACE_FOR_RELOPS
  494. #     define __STL_BEGIN_RELOPS_NAMESPACE namespace std { namespace rel_ops {
  495. #     define __STL_END_RELOPS_NAMESPACE } }
  496. #     define __STD_RELOPS std::rel_ops
  497. #   else /* Use std::rel_ops namespace */
  498. #     define __STL_USE_NAMESPACE_FOR_RELOPS
  499. #     define __STL_BEGIN_RELOPS_NAMESPACE namespace std {
  500. #     define __STL_END_RELOPS_NAMESPACE }
  501. #     define __STD_RELOPS std
  502. #   endif /* Use std::rel_ops namespace */
  503. # else
  504. #   define __STD
  505. #   define __STL_BEGIN_NAMESPACE
  506. #   define __STL_END_NAMESPACE
  507. #   undef  __STL_USE_NAMESPACE_FOR_RELOPS
  508. #   define __STL_BEGIN_RELOPS_NAMESPACE
  509. #   define __STL_END_RELOPS_NAMESPACE
  510. #   define __STD_RELOPS
  511. #   undef  __STL_USE_NAMESPACES
  512. # endif
  513.  
  514. // Some versions of the EDG front end sometimes require an explicit
  515. // namespace spec where they shouldn't.  This macro facilitates that.
  516. // If the bug becomes irrelevant, then all uses of __STD_QUALIFIER
  517. // should be removed.  The 7.3 beta SGI compiler has this bug, but the
  518. // MR version is not expected to have it.
  519.  
  520. # if defined(__STL_USE_NAMESPACES) && !defined(__STD_QUALIFIER)
  521. #   define __STD_QUALIFIER std::
  522. # else
  523. #   define __STD_QUALIFIER
  524. # endif
  525.  
  526. # ifdef __STL_USE_EXCEPTIONS
  527. #   define __STL_TRY try
  528. #   define __STL_CATCH_ALL catch(...)
  529. #   define __STL_THROW(x) throw x
  530. #   define __STL_RETHROW throw
  531. #   define __STL_NOTHROW throw()
  532. #   define __STL_UNWIND(action) catch(...) { action; throw; }
  533. # else
  534. #   define __STL_TRY
  535. #   define __STL_CATCH_ALL if (false)
  536. #   define __STL_THROW(x)
  537. #   define __STL_RETHROW
  538. #   define __STL_NOTHROW
  539. #   define __STL_UNWIND(action)
  540. # endif
  541.  
  542. #ifdef __STL_ASSERTIONS
  543. # include <stdio.h>
  544. # define __stl_assert(expr) \
  545.     if (!(expr)) { fprintf(stderr, "%s:%d STL assertion failure: %s\n", \
  546.                           __FILE__, __LINE__, # expr); abort(); }
  547. #else
  548. # define __stl_assert(expr)
  549. #endif
  550.  
  551. #if defined(__STL_WIN32THREADS) || defined(__STL_SGI_THREADS) \
  552.     || defined(__STL_PTHREADS)  || defined(__STL_UITHREADS)
  553. #   define __STL_THREADS
  554. #   define __STL_VOLATILE volatile
  555. #else
  556. #   define __STL_VOLATILE
  557. #endif
  558.  
  559. // Because concept-checks do not presently work correctly, they
  560. // are disabled.
  561. #if 0
  562. #if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) \
  563.     && defined(__STL_MEMBER_TEMPLATES) \
  564.     && !defined(_STL_NO_CONCEPT_CHECKS)
  565. #  define __STL_USE_CONCEPT_CHECKS
  566. #endif
  567. #endif
  568.  
  569. #endif /* __STL_CONFIG_H */
  570.  
  571. // Local Variables:
  572. // mode:C++
  573. // End:
  574.