stl_config.h
上传用户:sichengcw
上传日期:2009-02-17
资源大小:202k
文件大小:8k
源码类别:

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. // What this file does.
  29. //  (1)  Defines bool, true, and false if the compiler doesn't do so already.
  30. //  (2)  Defines __STL_NO_DRAND48 if the compiler's standard library does
  31. //       not support the drand48() function.
  32. //  (3)  Defines __STL_STATIC_TEMPLATE_MEMBER_BUG if the compiler can't 
  33. //       handle static members of template classes.
  34. //  (4)  Defines 'typename' as a null macro if the compiler does not support
  35. //       the typename keyword.
  36. //  (5)  Defines __STL_CLASS_PARTIAL_SPECIALIZATION if the compiler 
  37. //       supports partial specialization of class templates.
  38. //  (6)  Defines __STL_FUNCTION_TMPL_PARTIAL_ORDER if the compiler supports
  39. //       partial ordering of function templates (a.k.a partial specialization
  40. //       of function templates.
  41. //  (7)  Defines __STL_EXPLICIT_FUNCTION_TMPL_ARGS if the compiler
  42. //       supports calling a function template by providing its template
  43. //       arguments explicitly.
  44. //  (8)  Defines __STL_MEMBER_TEMPLATES if the compiler supports
  45. //       template members of classes.
  46. //  (9)  Defines 'explicit' as a null macro if the compiler does not support
  47. //       the explicit keyword.    
  48. //  (10) Defines __STL_LIMITED_DEFAULT_TEMPLATES if the compiler is
  49. //       unable to handle default template parameters that depend on
  50. //       previous template parameters.
  51. //  (11) Defines __STL_NON_TYPE_TMPL_PARAM_BUG if the compiler has 
  52. //       trouble performing function template argument deduction for
  53. //       non-type template parameters.
  54. //  (12) Defines __SGI_STL_NO_ARROW_OPERATOR if the compiler is unable
  55. //       to support the -> operator for iterators.
  56. //  (13) Defines __STL_USE_EXCEPTIONS if the compiler (in the current
  57. //       compilation mode) supports exceptions.
  58. //  (14) Define __STL_USE_NAMESPACES if we're putting the STL into a 
  59. //       namespace.  
  60. //  (15) Defines __STL_SGI_THREADS if this is being compiled on an SGI
  61. //       compiler, and if the user hasn't selected pthreads or no threads
  62. //       instead.
  63. //  (16) Defines __STL_WIN32THREADS if this is being compiled on a 
  64. //       WIN32 compiler in multithreaded mode.
  65. //  (17) Define namespace-related macros (__STD, __STL_BEGIN_NAMESPACE, etc.)
  66. //       apropriately.
  67. //  (18) Define exception-related macros (__STL_TRY, __STL_UNWIND, etc.)
  68. //       appropriately.
  69. //  (19) Defines __stl_assert either as a test or as a null macro,
  70. //       depending on whether or not __STL_ASSERTIONS is defined.
  71. #ifdef _PTHREADS
  72. #   define __STL_PTHREADS
  73. #endif
  74. # if defined(__sgi) && !defined(__GNUC__)
  75. #   if !defined(_BOOL)
  76. #     define __STL_NEED_BOOL
  77. #   endif
  78. #   if !defined(_TYPENAME_IS_KEYWORD)
  79. #     define __STL_NEED_TYPENAME
  80. #   endif
  81. #   ifdef _PARTIAL_SPECIALIZATION_OF_CLASS_TEMPLATES
  82. #     define __STL_CLASS_PARTIAL_SPECIALIZATION
  83. #   endif
  84. #   ifdef _MEMBER_TEMPLATES
  85. #     define __STL_MEMBER_TEMPLATES
  86. #   endif
  87. #   if !defined(_EXPLICIT_IS_KEYWORD)
  88. #     define __STL_NEED_EXPLICIT
  89. #   endif
  90. #   ifdef __EXCEPTIONS
  91. #     define __STL_USE_EXCEPTIONS
  92. #   endif
  93. #   if (_COMPILER_VERSION >= 721) && defined(_NAMESPACES)
  94. #     define __STL_USE_NAMESPACES
  95. #   endif 
  96. #   if !defined(_NOTHREADS) && !defined(__STL_PTHREADS)
  97. #     define __STL_SGI_THREADS
  98. #   endif
  99. # endif
  100. # ifdef __GNUC__
  101. #   include <_G_config.h>
  102. #   if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
  103. #     define __STL_STATIC_TEMPLATE_MEMBER_BUG
  104. #     define __STL_NEED_TYPENAME
  105. #     define __STL_NEED_EXPLICIT
  106. #   else
  107. #     define __STL_CLASS_PARTIAL_SPECIALIZATION
  108. #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER
  109. #     define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
  110. #     define __STL_MEMBER_TEMPLATES
  111. #   endif
  112.     /* glibc pre 2.0 is very buggy. We have to disable thread for it.
  113.        It should be upgraded to glibc 2.0 or later. */
  114. #   if !defined(_NOTHREADS) && __GLIBC__ >= 2 && defined(_G_USING_THUNKS)
  115. #     define __STL_PTHREADS
  116. #   endif
  117. #   ifdef __EXCEPTIONS
  118. #     define __STL_USE_EXCEPTIONS
  119. #   endif
  120. # endif
  121. # if defined(__SUNPRO_CC) 
  122. #   define __STL_NEED_BOOL
  123. #   define __STL_NEED_TYPENAME
  124. #   define __STL_NEED_EXPLICIT
  125. #   define __STL_USE_EXCEPTIONS
  126. # endif
  127. # if defined(__COMO__)
  128. #   define __STL_MEMBER_TEMPLATES
  129. #   define __STL_CLASS_PARTIAL_SPECIALIZATION
  130. #   define __STL_USE_EXCEPTIONS
  131. #   define __STL_USE_NAMESPACES
  132. # endif
  133. # if defined(_MSC_VER)
  134. #   if _MSC_VER > 1000
  135. #     include <yvals.h>
  136. #   else
  137. #     define __STL_NEED_BOOL
  138. #   endif
  139. #   define __STL_NO_DRAND48
  140. #   define __STL_NEED_TYPENAME
  141. #   if _MSC_VER < 1100
  142. #     define __STL_NEED_EXPLICIT
  143. #   endif
  144. #   define __STL_NON_TYPE_TMPL_PARAM_BUG
  145. #   define __SGI_STL_NO_ARROW_OPERATOR
  146. #   ifdef _CPPUNWIND
  147. #     define __STL_USE_EXCEPTIONS
  148. #   endif
  149. #   ifdef _MT
  150. #     define __STL_WIN32THREADS
  151. #   endif
  152. # endif
  153. # if defined(__BORLANDC__)
  154. #   define __STL_NO_DRAND48
  155. #   define __STL_NEED_TYPENAME
  156. #   define __STL_LIMITED_DEFAULT_TEMPLATES
  157. #   define __SGI_STL_NO_ARROW_OPERATOR
  158. #   define __STL_NON_TYPE_TMPL_PARAM_BUG
  159. #   ifdef _CPPUNWIND
  160. #     define __STL_USE_EXCEPTIONS
  161. #   endif
  162. #   ifdef __MT__
  163. #     define __STL_WIN32THREADS
  164. #   endif
  165. # endif
  166. # if defined(__STL_NEED_BOOL)
  167.     typedef int bool;
  168. #   define true 1
  169. #   define false 0
  170. # endif
  171. # ifdef __STL_NEED_TYPENAME
  172. #   define typename
  173. # endif
  174. # ifdef __STL_NEED_EXPLICIT
  175. #   define explicit
  176. # endif
  177. # ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS
  178. #   define __STL_NULL_TMPL_ARGS <>
  179. # else
  180. #   define __STL_NULL_TMPL_ARGS
  181. # endif
  182. # ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
  183. #   define __STL_TEMPLATE_NULL template<>
  184. # else
  185. #   define __STL_TEMPLATE_NULL
  186. # endif
  187. // __STL_NO_NAMESPACES is a hook so that users can disable namespaces
  188. // without having to edit library headers.
  189. # if defined(__STL_USE_NAMESPACES) && !defined(__STL_NO_NAMESPACES)
  190. #   define __STD std
  191. #   define __STL_BEGIN_NAMESPACE namespace std {
  192. #   define __STL_END_NAMESPACE }
  193. #   define  __STL_USE_NAMESPACE_FOR_RELOPS
  194. #   define __STL_BEGIN_RELOPS_NAMESPACE namespace std {
  195. #   define __STL_END_RELOPS_NAMESPACE }
  196. #   define __STD_RELOPS std
  197. # else
  198. #   define __STD 
  199. #   define __STL_BEGIN_NAMESPACE 
  200. #   define __STL_END_NAMESPACE 
  201. #   undef  __STL_USE_NAMESPACE_FOR_RELOPS
  202. #   define __STL_BEGIN_RELOPS_NAMESPACE 
  203. #   define __STL_END_RELOPS_NAMESPACE 
  204. #   define __STD_RELOPS 
  205. # endif
  206. # ifdef __STL_USE_EXCEPTIONS
  207. #   define __STL_TRY try
  208. #   define __STL_CATCH_ALL catch(...)
  209. #   define __STL_RETHROW throw
  210. #   define __STL_NOTHROW throw()
  211. #   define __STL_UNWIND(action) catch(...) { action; throw; }
  212. # else
  213. #   define __STL_TRY 
  214. #   define __STL_CATCH_ALL if (false)
  215. #   define __STL_RETHROW 
  216. #   define __STL_NOTHROW 
  217. #   define __STL_UNWIND(action) 
  218. # endif
  219. #ifdef __STL_ASSERTIONS
  220. # include <stdio.h>
  221. # define __stl_assert(expr) 
  222.     if (!(expr)) { fprintf(stderr, "%s:%d STL assertion failure: %sn", 
  223.   __FILE__, __LINE__, # expr); abort(); }
  224. #else
  225. # define __stl_assert(expr)
  226. #endif
  227. #endif /* __STL_CONFIG_H */
  228. // Local Variables:
  229. // mode:C++
  230. // End: