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_CLASS_PARTIAL_SPECIALIZATION: defined if the compiler supports 39 // partial specialization of template classes. 40 // * __STL_PARTIAL_SPECIALIZATION_SYNTAX: defined if the compiler 41 // supports partial specialization syntax for full specialization of 42 // class templates. (Even if it doesn't actually support partial 43 // specialization itself.) 44 // * __STL_FUNCTION_TMPL_PARTIAL_ORDER: defined if the compiler supports 45 // partial ordering of function templates. (a.k.a partial specialization 46 // of function templates.) 47 // * __STL_MEMBER_TEMPLATES: defined if the compiler supports template 48 // member functions of classes. 49 // * __STL_MEMBER_TEMPLATE_CLASSES: defined if the compiler supports 50 // nested classes that are member templates of other classes. 51 // * __STL_EXPLICIT_FUNCTION_TMPL_ARGS: defined if the compiler 52 // supports calling a function template by providing its template 53 // arguments explicitly. 54 // * __STL_LIMITED_DEFAULT_TEMPLATES: defined if the compiler is unable 55 // to handle default template parameters that depend on previous template 56 // parameters. 57 // * __STL_NON_TYPE_TMPL_PARAM_BUG: defined if the compiler has trouble with 58 // function template argument deduction for non-type template parameters. 59 // * __SGI_STL_NO_ARROW_OPERATOR: defined if the compiler is unable 60 // to support the -> operator for iterators. 61 // * __STL_USE_EXCEPTIONS: defined if the compiler (in the current compilation 62 // mode) supports exceptions. 63 // * __STL_USE_NAMESPACES: defined if the compiler has the necessary 64 // support for namespaces. 65 // * __STL_NO_EXCEPTION_HEADER: defined if the compiler does not have a 66 // standard-conforming header <exception>. 67 // * __STL_SGI_THREADS: defined if this is being compiled for an SGI IRIX 68 // system in multithreaded mode, using native SGI threads instead of 69 // pthreads. 70 // * __STL_WIN32THREADS: defined if this is being compiled on a WIN32 71 // compiler in multithreaded mode. 72 // * __STL_LONG_LONG if the compiler has long long and unsigned long long 73 // types. (They're not in the C++ standard, but they are expected to be 74 // included in the forthcoming C9X standard.) 75 76 77 // User-settable macros that control compilation: 78 // * __STL_USE_SGI_ALLOCATORS: if defined, then the STL will use older 79 // SGI-style allocators, instead of standard-conforming allocators, 80 // even if the compiler supports all of the language features needed 81 // for standard-conforming allocators. 82 // * __STL_NO_NAMESPACES: if defined, don't put the library in namespace 83 // std, even if the compiler supports namespaces. 84 // * __STL_ASSERTIONS: if defined, then enable runtime checking through the 85 // __stl_assert macro. 86 // * _PTHREADS: if defined, use Posix threads for multithreading support. 87 // * _NOTHREADS: if defined, don't use any multithreading support. 88 89 90 # define __USE_MALLOC 91 // BeOS used to trick the STL allocator (in stl_alloc.h) into falling back 92 // to malloc/free-allocation by setting MAX_BYTES to 0. 93 // By requesting to use those directly, we should get the same allocator, 94 // but will avoid the '... creates array of size 0'-warnings that are 95 // produced by 'gcc -strict' (for instance when building ICU). 96 // Alternatively, we could define _PTHREADS here and use the real STL 97 // allocator with posix threads enabled (however, this would have to be 98 // tested first, and most probably requires a rebuild of gcc2, too, 99 // in order to make sure that no code existing in libstdc++.r4.so is 100 // still using the old allocator). 101 102 103 // Other macros defined by this file: 104 105 // * bool, true, and false, if __STL_NO_BOOL is defined. 106 // * typename, as a null macro if it's not already a keyword. 107 // * explicit, as a null macro if it's not already a keyword. 108 // * namespace-related macros (__STD, __STL_BEGIN_NAMESPACE, etc.) 109 // * exception-related macros (__STL_TRY, __STL_UNWIND, etc.) 110 // * __stl_assert, either as a test or as a null macro, depending on 111 // whether or not __STL_ASSERTIONS is defined. 112 113 #ifdef _PTHREADS 114 # define __STL_PTHREADS 115 #endif 116 #ifdef _SOLTHREADS 117 # define __STL_SOLTHREADS 118 #endif 119 120 # if defined(__sgi) && !defined(__GNUC__) 121 # if !defined(_BOOL) 122 # define __STL_NO_BOOL 123 # endif 124 # if defined(_WCHAR_T_IS_KEYWORD) 125 # define __STL_HAS_WCHAR_T 126 # endif 127 # if !defined(_TYPENAME_IS_KEYWORD) 128 # define __STL_NEED_TYPENAME 129 # endif 130 # ifdef _PARTIAL_SPECIALIZATION_OF_CLASS_TEMPLATES 131 # define __STL_CLASS_PARTIAL_SPECIALIZATION 132 # endif 133 # ifdef _MEMBER_TEMPLATES 134 # define __STL_MEMBER_TEMPLATES 135 # define __STL_MEMBER_TEMPLATE_CLASSES 136 # endif 137 # if defined(_MEMBER_TEMPLATE_KEYWORD) 138 # define __STL_MEMBER_TEMPLATE_KEYWORD 139 # endif 140 # if (_COMPILER_VERSION >= 730) && defined(_MIPS_SIM) && _MIPS_SIM != _ABIO32 141 # define __STL_MEMBER_TEMPLATE_KEYWORD 142 # endif 143 # if !defined(_EXPLICIT_IS_KEYWORD) 144 # define __STL_NEED_EXPLICIT 145 # endif 146 # ifdef __EXCEPTIONS 147 # define __STL_USE_EXCEPTIONS 148 # endif 149 # if (_COMPILER_VERSION >= 721) && defined(_NAMESPACES) 150 # define __STL_HAS_NAMESPACES 151 # endif 152 # if (_COMPILER_VERSION < 721) 153 # define __STL_NO_EXCEPTION_HEADER 154 # endif 155 # if !defined(_NOTHREADS) && !defined(__STL_PTHREADS) 156 # define __STL_SGI_THREADS 157 # endif 158 # if defined(_LONGLONG) && defined(_SGIAPI) && _SGIAPI 159 # define __STL_LONG_LONG 160 # endif 161 # endif 162 163 # ifdef __GNUC__ 164 # include <_G_config.h> 165 # define __STL_HAS_WCHAR_T 166 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) 167 # define __STL_STATIC_TEMPLATE_MEMBER_BUG 168 # define __STL_NEED_TYPENAME 169 # define __STL_NEED_EXPLICIT 170 # else 171 # define __STL_CLASS_PARTIAL_SPECIALIZATION 172 # define __STL_FUNCTION_TMPL_PARTIAL_ORDER 173 # define __STL_MEMBER_TEMPLATES 174 # define __STL_MEMBER_TEMPLATE_CLASSES 175 # define __STL_EXPLICIT_FUNCTION_TMPL_ARGS 176 # define __STL_HAS_NAMESPACES 177 # define __STL_NO_NAMESPACES 178 # define __SGI_STL_USE_AUTO_PTR_CONVERSIONS 179 # define __STL_USE_NAMESPACES 180 # endif 181 # if defined(__linux__) 182 /* glibc pre 2.0 is very buggy. We have to disable thread for it. 183 It should be upgraded to glibc 2.0 or later. */ 184 # if !defined(_NOTHREADS) && __GLIBC__ >= 2 && defined(_G_USING_THUNKS) 185 # define __STL_PTHREADS 186 # ifdef __STRICT_ANSI__ 187 /* Work around a bug in the glibc 2.0.x pthread.h. */ 188 # define sigset_t __sigset_t 189 # endif 190 # endif 191 # endif 192 # ifdef __EXCEPTIONS 193 # define __STL_USE_EXCEPTIONS 194 # endif 195 # ifndef __STRICT_ANSI__ 196 # define __STL_LONG_LONG 197 # endif 198 # endif 199 200 # if defined(__SUNPRO_CC) 201 # define __STL_NO_BOOL 202 # define __STL_NEED_TYPENAME 203 # define __STL_NEED_EXPLICIT 204 # define __STL_USE_EXCEPTIONS 205 # endif 206 207 # if defined(__COMO__) 208 # define __STL_MEMBER_TEMPLATES 209 # define __STL_MEMBER_TEMPLATE_CLASSES 210 # define __STL_CLASS_PARTIAL_SPECIALIZATION 211 # define __STL_USE_EXCEPTIONS 212 # define __STL_HAS_NAMESPACES 213 # endif 214 215 # if defined(__MINGW32__) 216 # define __STL_NO_DRAND48 217 # endif 218 219 # if defined(__CYGWIN__) 220 # define __STL_NO_DRAND48 221 # endif 222 223 # if defined(_MSC_VER) 224 # define __STL_NO_DRAND48 225 # define __STL_NEED_TYPENAME 226 # if _MSC_VER < 1100 /* 1000 is version 4.0, 1100 is 5.0, 1200 is 6.0. */ 227 # define __STL_NEED_EXPLICIT 228 # define __STL_NO_BOOL 229 # if _MSC_VER > 1000 230 # include <yvals.h> 231 # define __STL_DONT_USE_BOOL_TYPEDEF 232 # endif 233 # endif 234 # define __STL_NON_TYPE_TMPL_PARAM_BUG 235 # define __SGI_STL_NO_ARROW_OPERATOR 236 # ifdef _CPPUNWIND 237 # define __STL_USE_EXCEPTIONS 238 # endif 239 # ifdef _MT 240 # define __STL_WIN32THREADS 241 # endif 242 # if _MSC_VER >= 1200 243 # define __STL_PARTIAL_SPECIALIZATION_SYNTAX 244 # define __STL_HAS_NAMESPACES 245 # define __STL_NO_NAMESPACES 246 # endif 247 # endif 248 249 # if defined(__BORLANDC__) 250 # define __STL_NO_DRAND48 251 # define __STL_NEED_TYPENAME 252 # define __STL_LIMITED_DEFAULT_TEMPLATES 253 # define __SGI_STL_NO_ARROW_OPERATOR 254 # define __STL_NON_TYPE_TMPL_PARAM_BUG 255 # ifdef _CPPUNWIND 256 # define __STL_USE_EXCEPTIONS 257 # endif 258 # ifdef __MT__ 259 # define __STL_WIN32THREADS 260 # endif 261 # endif 262 263 # if defined(__STL_NO_BOOL) && !defined(__STL_DONT_USE_BOOL_TYPEDEF) 264 typedef int bool; 265 # define true 1 266 # define false 0 267 # endif 268 269 # ifdef __STL_NEED_TYPENAME 270 # define typename 271 # endif 272 273 # ifdef __STL_MEMBER_TEMPLATE_KEYWORD 274 # define __STL_TEMPLATE template 275 # else 276 # define __STL_TEMPLATE 277 # endif 278 279 # ifdef __STL_NEED_EXPLICIT 280 # define explicit 281 # endif 282 283 # ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS 284 # define __STL_NULL_TMPL_ARGS <> 285 # else 286 # define __STL_NULL_TMPL_ARGS 287 # endif 288 289 # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) \ 290 || defined (__STL_PARTIAL_SPECIALIZATION_SYNTAX) 291 # define __STL_TEMPLATE_NULL template<> 292 # else 293 # define __STL_TEMPLATE_NULL 294 # endif 295 296 // Use standard-conforming allocators if we have the necessary language 297 // features. __STL_USE_SGI_ALLOCATORS is a hook so that users can 298 // disable new-style allocators, and continue to use the same kind of 299 // allocators as before, without having to edit library headers. 300 # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && \ 301 defined(__STL_MEMBER_TEMPLATES) && \ 302 defined(__STL_MEMBER_TEMPLATE_CLASSES) && \ 303 !defined(__STL_NO_BOOL) && \ 304 !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) && \ 305 !defined(__STL_LIMITED_DEFAULT_TEMPLATES) && \ 306 !defined(__STL_USE_SGI_ALLOCATORS) || \ 307 (defined(__BEOS__) || defined(__HAIKU__)) 308 # define __STL_USE_STD_ALLOCATORS 309 # endif 310 311 # ifndef __STL_DEFAULT_ALLOCATOR 312 # ifdef __STL_USE_STD_ALLOCATORS 313 # define __STL_DEFAULT_ALLOCATOR(T) allocator<T> 314 # else 315 # define __STL_DEFAULT_ALLOCATOR(T) alloc 316 # endif 317 # endif 318 319 // __STL_NO_NAMESPACES is a hook so that users can disable namespaces 320 // without having to edit library headers. 321 # if defined(__STL_HAS_NAMESPACES) && !defined(__STL_NO_NAMESPACES) 322 # define __STD std 323 # define __STL_BEGIN_NAMESPACE namespace std { 324 # define __STL_END_NAMESPACE } 325 # define __STL_USE_NAMESPACE_FOR_RELOPS 326 # define __STL_BEGIN_RELOPS_NAMESPACE namespace std { 327 # define __STL_END_RELOPS_NAMESPACE } 328 # define __STD_RELOPS std 329 # define __STL_USE_NAMESPACES 330 # else 331 # define __STD 332 # define __STL_BEGIN_NAMESPACE 333 # define __STL_END_NAMESPACE 334 # undef __STL_USE_NAMESPACE_FOR_RELOPS 335 # define __STL_BEGIN_RELOPS_NAMESPACE 336 # define __STL_END_RELOPS_NAMESPACE 337 # define __STD_RELOPS 338 # undef __STL_USE_NAMESPACES 339 # endif 340 341 # ifdef __STL_USE_EXCEPTIONS 342 # define __STL_TRY try 343 # define __STL_CATCH_ALL catch(...) 344 # define __STL_THROW(x) throw x 345 # define __STL_RETHROW throw 346 # define __STL_NOTHROW throw() 347 # define __STL_UNWIND(action) catch(...) { action; throw; } 348 # else 349 # define __STL_TRY 350 # define __STL_CATCH_ALL if (false) 351 # define __STL_THROW(x) 352 # define __STL_RETHROW 353 # define __STL_NOTHROW 354 # define __STL_UNWIND(action) 355 # endif 356 357 #ifdef __STL_ASSERTIONS 358 # include <stdio.h> 359 # define __stl_assert(expr) \ 360 if (!(expr)) { fprintf(stderr, "%s:%d STL assertion failure: %s\n", \ 361 __FILE__, __LINE__, # expr); abort(); } 362 #else 363 # define __stl_assert(expr) 364 #endif 365 366 #endif /* __STL_CONFIG_H */ 367 368 // Local Variables: 369 // mode:C++ 370 // End: 371