home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 January / PCWorld_2000-01_cd.bin / Software / Servis / Devc / _SETUP.4 / Group3 / stl_config.h < prev    next >
C/C++ Source or Header  |  1998-03-08  |  8KB  |  253 lines

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