stl_conf.h
上传用户:nizebo
上传日期:2022-05-14
资源大小:882k
文件大小:20k
源码类别:

STL

开发平台:

Visual C++

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