1 // Boost config.hpp configuration header file ------------------------------//
3 // (C) Copyright Boost.org 1999. Permission to copy, use, modify, sell and
4 // distribute this software is granted provided this copyright notice appears
5 // in all copies. This software is provided "as is" without express or implied
6 // warranty, and with no claim as to its suitability for any purpose.
8 // See http://www.boost.org for most recent version.
10 // Boost config.hpp policy and rationale documentation has been moved to
11 // http://www.boost.org/libs/config
13 // Revision History (excluding minor changes for specific compilers)
14 // 29 Mar 01 BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS (Daryle Walker)
15 // 16 Mar 01 Added BOOST_VERSION (Jens Maurer)
16 // 06 Mar 01 Refactored EDG checks for Intel C++ (Dave Abrahams)
17 // 04 Mar 01 Factored EDG checks, added BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
18 // for Intel C++ 5.0 (Dave Abrahams)
19 // 17 Feb 01 BOOST_NO_CV_SPECIALIZATIONS
20 // BOOST_NO_CV_VOID_SPECIALIZATIONS (John Maddock)
21 // 11 Feb 01 Added BOOST_STATIC_CONSTANT (Dave Abrahams)
22 // 20 Jan 01 BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS moved here from
23 // cast.hpp. Added missing BOOST_NO_STRINGSTREAM which some
24 // boost code seemed to depend on. (Dave Abrahams)
25 // 13 Jan 01 SGI MIPSpro and Compaq Tru64 Unix compiler support added
27 // 13 Jan 01 BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP (Jens Maurer)
28 // 17 Nov 00 BOOST_NO_AUTO_PTR (John Maddock)
29 // 4 Oct 00 BOOST_NO_STD_MIN_MAX (Jeremy Siek)
30 // 29 Sep 00 BOOST_NO_INTEGRAL_INT64_T (Jens Maurer)
31 // 25 Sep 00 BOOST_NO_STD_ALLOCATOR (Jeremy Siek)
32 // 18 SEP 00 BOOST_NO_SLIST, BOOST_NO_HASH,
33 // BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
34 // BOOST_NO_LIMITS (Jeremy Siek)
35 // 1 Sep 00 BOOST_NO_PRIVATE_IN_AGGREGATE added. (Mark Rodgers)
36 // 23 Jul 00 Fixed spelling of BOOST_NO_INCLASS_MEMBER_INITIALIZATION in
37 // comment (Dave Abrahams).
38 // 10 Jul 00 BOOST_NO_POINTER_TO_MEMBER_CONST added (Mark Rodgers)
39 // 26 Jun 00 BOOST_NO_STD_ITERATOR, BOOST_MSVC_STD_ITERATOR,
40 // BOOST_NO_STD_ITERATOR_TRAITS, BOOST_NO_USING_TEMPLATE,
41 // added (Jeremy Siek)
42 // 20 Jun 00 BOOST_MSVC added (Aleksey Gurtovoy)
43 // 14 Jun 00 BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS (Jens M.)
44 // 22 Mar 00 BOOST_MSVC6_MEMBER_TEMPLATES added (Dave Abrahams)
45 // 18 Feb 00 BOOST_NO_INCLASS_MEMBER_INITIALIZATION added (Jens Maurer)
46 // 26 Jan 00 Borland compiler support added (John Maddock)
47 // 26 Jan 00 Sun compiler support added (Jörg Schaible)
48 // 30 Dec 99 BOOST_NMEMBER_TEMPLATES compatibility moved here from
49 // smart_ptr.hpp. (Dave Abrahams)
50 // 15 Nov 99 BOOST_NO_OPERATORS_IN_NAMESPACE,
51 // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION added (Beman Dawes)
52 // 11 Oct 99 BOOST_NO_STDC_NAMESPACE refined; <cstddef> supplied
53 // 29 Sep 99 BOOST_NO_STDC_NAMESPACE added (Ed Brey)
54 // 24 Sep 99 BOOST_DECL added (Ed Brey)
55 // 10 Aug 99 Endedness flags added, GNU CC support added
56 // 22 Jul 99 Initial version
59 #ifndef BOOST_CONFIG_HPP
60 #define BOOST_CONFIG_HPP
62 #define BOOST_VERSION 102400
64 // BOOST_VERSION % 100 is the sub-minor version
65 // BOOST_VERSION / 100 % 1000 is the minor version
66 // BOOST_VERSION / 100000 is the major version
69 // Conformance Flag Macros -------------------------------------------------//
71 // Conformance flag macros should identify the absence of C++ Standard
72 // conformance rather than its presence. This ensures that standard conforming
73 // compilers do not require a lot of configuration flag macros. It places the
74 // burden where it should be, on non-conforming compilers. In the future,
75 // hopefully, less rather than more conformance flags will have to be defined.
77 // BOOST_NO_CV_SPECIALIZATIONS: if template specializations for cv-qualified
78 // types conflict with a specialization for unqualififed type.
80 // BOOST_NO_CV_VOID_SPECIALIZATIONS: if template specializations for cv-void
81 // types conflict with a specialization for void.
83 // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP: Compiler does not implement
84 // argument-dependent lookup (also named Koenig lookup); see std::3.4.2
85 // [basic.koenig.lookup]
87 // BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS: Template value
88 // parameters cannot have a dependent type, for example
89 // "template<class T, typename T::type value> class X { ... };"
91 // BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS: Can only use deduced
92 // template arguments when calling function template instantiations.
94 // BOOST_NO_INCLASS_MEMBER_INITIALIZATION: Compiler violates std::9.4.2/4.
96 // BOOST_NO_INT64_T: <boost/cstdint.hpp> does not support 64-bit integer
97 // types. (Set by <boost/cstdint.hpp> rather than <boost/config.hpp>).
99 // BOOST_NO_INTEGRAL_INT64_T: int64_t as defined by <boost/cstdint.hpp> is
100 // not an integral type.
102 // BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS: constants such as
103 // numeric_limits<T>::is_signed are not available for use at compile-time.
105 // BOOST_NO_MEMBER_TEMPLATES: Member template functions not fully supported.
106 // Also see BOOST_MSVC6_MEMBER_TEMPLATES in the Compiler Control section below.
108 // BOOST_NO_MEMBER_TEMPLATE_FRIENDS: Member template friend syntax
109 // ("template<class P> friend class frd;") described in the C++ Standard,
110 // 14.5.3, not supported.
112 // BOOST_NO_OPERATORS_IN_NAMESPACE: Compiler requires inherited operator
113 // friend functions to be defined at namespace scope, then using'ed to boost.
114 // Probably GCC specific. See boost/operators.hpp for example.
116 // BOOST_NO_POINTER_TO_MEMBER_CONST: The compiler does not correctly handle
117 // pointers to const member functions, preventing use of these in overloaded
118 // function templates. See boost/functional.hpp for example.
120 // BOOST_NO_PRIVATE_IN_AGGREGATE: The compiler misreads 8.5.1, treating classes
121 // as non-aggregate if they contain private or protected member functions.
123 // BOOST_NO_STD_ITERATOR: The C++ implementation fails to provide the
124 // std::iterator class.
126 // BOOST_NO_STD_ITERATOR_TRAITS: The compiler does not provide a standard
127 // compliant implementation of std::iterator_traits. Note that
128 // the compiler may still have a non-standard implementation.
130 // BOOST_NO_STDC_NAMESPACE: The contents of C++ standard headers for C library
131 // functions (the <c...> headers) have not been placed in namespace std.
132 // Because the use of std::size_t is so common, a specific workaround for
133 // <cstddef> (and thus std::size_t) is provided in this header (see below).
134 // For other <c...> headers, a workaround must be provided in the boost header:
136 // #include <cstdlib> // for abs
137 // #ifdef BOOST_NO_STDC_NAMESPACE
138 // namespace std { using ::abs; }
141 // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION. Class template partial
142 // specialization (14.5.4 [temp.class.spec]) not supported.
144 // BOOST_NO_USING_TEMPLATE: The compiler will not accept a using declaration
145 // that imports a template from the global namespace into a named namespace.
146 // Probably Borland specific.
148 // BOOST_NO_AUTO_PTR: If the compiler / library supplies non-standard or broken
151 // BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING: The compiler does not perform
152 // function template ordering or its function template ordering is incorrect.
154 // template<typename T> void f(T); // #1
155 // template<typename T, typename U> void f(T (*)(U)); // #2
157 // f(&bar); // should choose #2.
159 // BOOST_NO_DEPENDENT_NESTED_DERIVATIONS: The compiler fails to compile
160 // a nested class that has a dependent base class:
161 // template<typename T>
162 // struct foo : public T {
163 // template<typename U>
164 // struct bar : public T, public U {};
168 // Compiler Control or Information Macros ----------------------------------//
170 // Compilers often supply features outside of the C++ Standard which need to be
171 // controlled or detected. As usual, reasonable default behavior should occur
172 // if any of these macros are not defined.
174 // BOOST_DECL: Certain compilers for Microsoft operating systems require
175 // non-standard class and function decoration if dynamic load library linking
176 // is desired. BOOST_DECL supplies that decoration. Boost does not require
177 // use of BOOST_DECL - it is non-standard and to be avoided if practical to do
178 // so. Even compilers requiring it for DLL's only require it in certain cases.
180 // BOOST_DECL_EXPORTS: User defined, usually via command line or IDE,
181 // it causes BOOST_DECL to be defined as __declspec(dllexport).
183 // BOOST_DECL_IMPORTS: User defined, usually via command line or IDE,
184 // it causes BOOST_DECL to be defined as __declspec(dllimport).
186 // If neither BOOST_DECL_EXPORTS nor BOOST_DECL_IMPORTS is defined, or if
187 // the compiler does not require __declspec() decoration, BOOST_DECL is
188 // defined as a null string.
190 // BOOST_MSVC6_MEMBER_TEMPLATES: Microsoft Visual C++ 6.0 has enough member
191 // template idiosyncrasies (being polite) that BOOST_NO_MEMBER_TEMPLATES is
192 // defined for this compiler. BOOST_MSVC6_MEMBER_TEMPLATES is defined to allow
193 // compiler specific workarounds.
195 // BOOST_MSVC: defined as _MSC_VER for the Microsoft compiler only. In general,
196 // boost headers should test for a specific conformance flag macro (for
197 // example, BOOST_NO_MEMBER_TEMPLATE_FRIENDS) rather than a specific compiler.
198 // VC++ is a special case, however, since many libraries try to support it yet
199 // it has so many conformance issues that sometimes it is just easier to test
200 // for it directly. On the other hand, the obvious way to do this doesn't work,
201 // as many non-Microsoft compilers define _MSC_VER. Thus BOOST_MSVC.
203 // BOOST_MSVC_STD_ITERATOR: Microsoft's broken version of std::iterator
206 // BOOST_SYSTEM_HAS_STDINT_H: There are no 1998 C++ Standard headers <stdint.h>
207 // or <cstdint>, although the 1999 C Standard does include <stdint.h>.
208 // If <stdint.h> is present, <boost/stdint.h> can make good use of it,
209 // so a flag is supplied (signalling presence; thus the default is not
210 // present, conforming to the current C++ standard).
212 // BOOST_NO_SLIST: The C++ implementation does not provide the slist class.
214 // BOOST_NO_STRINGSTREAM: The C++ implementation does not provide the <sstream> header.
216 // BOOST_NO_HASH: The C++ implementation does not provide the hash_set
217 // or hash_map classes.
219 // BOOST_STD_EXTENSION_NAMESPACE: The name of the namespace in which the slist,
220 // hash_set and/or hash_map templates are defined in this implementation (if any).
222 // BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS: The standard library does not provide
223 // templated iterator constructors for its containers.
225 // BOOST_NO_LIMITS: The C++ implementation does not provide the <limits> header.
227 // BOOST_NO_INTRINSIC_WCHAR_T: The C++ implementation does not provide wchar_t,
228 // or it is really a synonym for another integral type. Use this symbol to
229 // decide whether it is appropriate to explicitly specialize a template on
230 // wchar_t if there is already a specialization for other integer types.
232 // BOOST_NO_STD_ALLOCATOR: The C++ standard library does not provide
233 // a standards conforming std::allocator.
235 // BOOST_NO_STD_MIN_MAX: The C++ standard library does not provide
236 // the min() and max() template functions that should be in <algorithm>.
238 // Common compiler front-ends precede all compiler checks ------------------//
240 // Edison Design Group front-ends
241 # if defined(__EDG_VERSION__)
242 # if __EDG_VERSION__ <= 241
243 # define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
248 // Compiler-specific checks -------------------------------------------------//
249 // Compilers are listed in alphabetic order by vendor name
250 // (except VC++ must be last - see below)
252 // Borland ------------------------------------------------------------------//
254 #if defined __BORLANDC__
255 # define BOOST_NO_SLIST
256 # define BOOST_NO_HASH
257 // pull in standard library version:
259 # if __BORLANDC__ <= 0x0551
260 # define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
261 # define BOOST_NO_INTEGRAL_INT64_T
262 # define BOOST_NO_PRIVATE_IN_AGGREGATE
264 # if __BORLANDC__ <= 0x0550
265 // Borland C++ Builder 4 and 5:
266 # define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
267 # define BOOST_NO_USING_TEMPLATE
268 # if __BORLANDC__ == 0x0550
269 // Borland C++ Builder 5, command-line compiler 5.5:
270 # define BOOST_NO_OPERATORS_IN_NAMESPACE
273 # if defined BOOST_DECL_EXPORTS
274 # if defined BOOST_DECL_IMPORTS
275 # error Not valid to define both BOOST_DECL_EXPORTS and BOOST_DECL_IMPORTS
277 # define BOOST_DECL __declspec(dllexport)
278 # elif defined BOOST_DECL_IMPORTS
279 # define BOOST_DECL __declspec(dllimport)
283 #if (__BORLANDC__ == 0x550) || (__BORLANDC__ == 0x551)
284 // <climits> is partly broken, some macos define symbols that are really in
285 // namespace std, so you end up having to use illegal constructs like
286 // std::DBL_MAX, as a fix we'll just include float.h and have done with:
289 # define BOOST_NO_CV_SPECIALIZATIONS
290 # define BOOST_NO_CV_VOID_SPECIALIZATIONS
292 // Comeau C++ ----------------------------------------------------------------//
294 # elif defined __COMO__
295 # if __COMO_VERSION__ <= 4245
296 # define BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
297 # if defined(_MSC_VER) && _MSC_VER <= 1200
298 # define BOOST_NO_STDC_NAMESPACE
302 // Compaq Tru64 Unix cxx ---------------------------------------------------
304 # elif defined __DECCXX
305 # define BOOST_NO_SLIST
306 # define BOOST_NO_HASH
308 // GNU CC (also known as GCC and G++) --------------------------------------//
310 # elif defined __GNUC__
311 # if __GNUC__ == 2 && __GNUC_MINOR__ == 91
312 // egcs 1.1 won't parse smart_ptr.hpp without this:
313 # define BOOST_NO_AUTO_PTR
315 # if __GNUC__ == 2 && __GNUC_MINOR__ <= 97
316 # include "LString.h" // not sure this is the right way to do this -JGS
317 # if defined(__BASTRING__) && !defined(__GLIBCPP__) && !defined(_CXXRT_STD) && !defined(__SGI_STL) // need to ask Dietmar about this -JGS
318 // this should only detect the stdlibc++ that ships with gcc, and
319 // not any replacements that may be installed...
320 # define BOOST_NO_STD_ITERATOR
321 # define BOOST_NO_LIMITS
323 # if !defined(_CXXRT_STD) && !defined(__SGI_STL_OWN_IOSTREAMS)
324 # define BOOST_NO_STRINGSTREAM
326 # define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
327 # define BOOST_NO_OPERATORS_IN_NAMESPACE
328 # define BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING
330 # if __GNUC__ == 2 && __GNUC_MINOR__ <= 8
331 # define BOOST_NO_MEMBER_TEMPLATES
335 # if defined(__GLIBCPP__)
336 // The new GNU C++ library has slist, hash_map, hash_set headers
337 // in <ext/*>, but client code assumes they're in <*> --- Jens M.
338 # define BOOST_NO_SLIST
339 # define BOOST_NO_HASH
343 // Greenhills C++ -----------------------------------------------------------//
346 # define BOOST_NO_SLIST
347 # define BOOST_NO_HASH
349 // HP aCC -------------------------------------------------------------------
351 # elif defined __HP_aCC
352 # define BOOST_NO_SLIST
353 # define BOOST_NO_HASH
354 # define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
355 # define BOOST_NO_OPERATORS_IN_NAMESPACE
356 // (support for HP aCC is not complete, see the regression test results)
358 // Intel on Linux -----------------------------------------------------------//
363 // shipped with Dinkumware 3.10, which has a different hash_map
364 # define BOOST_NO_HASH
367 // Intel on Windows --------------------------------------------------------//
371 // Intel C++ 5.0.1 uses EDG 2.45, but fails to activate Koenig lookup
372 // in the frontend even in "strict" mode. (reported by Kirk Klobe)
373 # ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
374 # define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
376 # define BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING
377 # define BOOST_NO_INTRINSIC_WCHAR_T // tentative addition - required for VC6 compatibility? (added by JM 19 Feb 2001)
379 # include <iterator> // not sure this is the right way to do this -JGS
380 # if __SGI_STL_PORT >= 0x400 || __SGI_STL_PORT >= 0x321 && defined(__STL_USE_NAMESPACES)
381 // a perfectly good implementation of std::iterator is supplied
382 # elif defined(__SGI_STL_ITERATOR)
383 # define BOOST_NO_STD_ITERATOR // No std::iterator in this case
384 # elif defined(_CPPLIB_VER) && (_CPPLIB_VER >= 306)
385 # // full dinkumware 3.06 and above
386 # define BOOST_NO_HASH
387 # define BOOST_NO_STD_ITERATOR_TRAITS
388 # if !_GLOBAL_USING // can be defined in yvals.h
389 # define BOOST_NO_STDC_NAMESPACE
391 # else // assume using dinkumware's STL that comes with VC++ 6.0
392 # define BOOST_MSVC_STD_ITERATOR
393 # define BOOST_NO_STD_ITERATOR_TRAITS
394 # define BOOST_NO_STDC_NAMESPACE
395 # define BOOST_NO_SLIST
396 # define BOOST_NO_HASH
397 # define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
398 # define BOOST_NO_STD_ALLOCATOR
399 # define BOOST_NO_STD_MIN_MAX
402 // Kai C++ ----------------------------------------------------------------
405 # define BOOST_NO_SLIST
406 # define BOOST_NO_HASH
408 # if __KCC_VERSION <= 4001
409 // at least on Sun, the contents of <cwchar> is not in namespace std
410 # define BOOST_NO_STDC_NAMESPACE
413 // Metrowerks CodeWarrior -------------------------------------------------//
415 # elif defined __MWERKS__
416 # if __MWERKS__ <= 0x2405 // 7
417 # define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
419 # if __MWERKS__ <= 0x2401 // 6.2
420 # define BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING
422 # if __MWERKS__ <= 0x2301 // 5.3
423 # define BOOST_NO_POINTER_TO_MEMBER_CONST
424 # define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
425 # define BOOST_NO_HASH
427 # if __MWERKS__ >= 0x2400
428 # define BOOST_STD_EXTENSION_NAMESPACE Metrowerks
430 # if __MWERKS__ >= 0x2300
431 # define BOOST_SYSTEM_HAS_STDINT_H
433 # if defined BOOST_DECL_EXPORTS
434 # if defined BOOST_DECL_IMPORTS
435 # error Not valid to define both BOOST_DECL_EXPORTS and BOOST_DECL_IMPORTS
437 # define BOOST_DECL __declspec(dllexport)
438 # elif defined BOOST_DECL_IMPORTS
439 # define BOOST_DECL __declspec(dllimport)
444 // SGI MIPSpro C++ ---------------------------------------------------------//
447 // This is a generic STLport condition and could be moved elsewhere.
449 # if defined(__SGI_STL_PORT) && !defined(__STL_MEMBER_TEMPLATE_CLASSES) && !defined(_STLP_MEMBER_TEMPLATE_CLASSES)
450 # define BOOST_NO_STD_ALLOCATOR
453 // Sun Workshop Compiler C++ -----------------------------------------------//
455 # elif defined __SUNPRO_CC
456 # if __SUNPRO_CC <= 0x520
457 # define BOOST_NO_SLIST
458 # define BOOST_NO_HASH
459 # define BOOST_NO_STD_ITERATOR_TRAITS
460 # define BOOST_NO_STD_ALLOCATOR
462 // although sunpro 5.1 supports the syntax for
463 // inline initialization it often gets the value
464 // wrong, especially where the value is computed
465 // from other constants (J Maddock 6th May 2001)
466 # define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
468 // although sunpro 5.1 supports the syntax for
469 // partial specialization, it often seems to
470 // bind to the wrong specialization. Better
471 // to disable it until suppport becomes more stable
472 // (J Maddock 6th May 2001).
473 # define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
475 # if __SUNPRO_CC <= 0x500
476 # define BOOST_NO_MEMBER_TEMPLATES
477 # define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
480 // Microsoft Visual C++ (excluding Intel/EDG front end) --------------------
482 // Must remain the last #elif since some other vendors (Metrowerks, for
483 // example) also #define _MSC_VER
485 # elif defined _MSC_VER
486 # define BOOST_MSVC _MSC_VER
488 // turn off the warnings before we #include anything
489 # pragma warning( disable : 4786 ) // ident trunc to '255' chars in debug info
490 # pragma warning( disable : 4503 ) // warning: decorated name length exceeded
492 # if _MSC_VER <= 1200 // 1200 == VC++ 6.0
493 # define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
494 # define BOOST_NO_PRIVATE_IN_AGGREGATE
495 # define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
496 # define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
498 # define BOOST_NO_INTEGRAL_INT64_T
499 # define BOOST_NO_INTRINSIC_WCHAR_T
501 // VC++ 6.0 has member templates but they have numerous problems including
502 // cases of silent failure, so for safety we define:
503 # define BOOST_NO_MEMBER_TEMPLATES
504 // For VC++ experts wishing to attempt workarounds, we define:
505 # define BOOST_MSVC6_MEMBER_TEMPLATES
507 # define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
508 # define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
509 # define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
510 # define BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING
511 # include <iterator> // not sure this is the right way to do this -JGS
512 # if __SGI_STL_PORT >= 0x400 || __SGI_STL_PORT >= 0x321 && defined(__STL_USE_NAMESPACES)
513 // a perfectly good implementation of std::iterator is supplied
514 // A conforming allocator is supplied, but the compiler cannot cope
515 // when using "rebind". (Douglas Gregor)
516 # define BOOST_NO_STD_ALLOCATOR
517 # elif defined(__SGI_STL_ITERATOR)
518 # define BOOST_NO_STD_ITERATOR // No std::iterator in this case
519 # elif defined(_CPPLIB_VER) && (_CPPLIB_VER >= 306)
520 // full dinkumware 3.06 and above
521 # define BOOST_NO_HASH
522 # define BOOST_NO_STD_ITERATOR_TRAITS
523 # ifndef _GLOBAL_USING // can be defined in yvals.h
524 # define BOOST_NO_STDC_NAMESPACE
526 # if _CPPLIB_VER < 308 // fix due to kensai@pacbell.net
527 # define BOOST_MSVC_STD_ITERATOR
530 # define BOOST_MSVC_STD_ITERATOR
531 # define BOOST_NO_SLIST
532 # define BOOST_NO_HASH
533 # define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
534 # define BOOST_NO_STD_ALLOCATOR
536 // Updated Dinkum library defines this, and provides
537 // its own min and max definitions.
538 # define BOOST_NO_STD_MIN_MAX
543 // avoid spurious NOMINMAX redefinition warning
547 # define BOOST_NO_STD_ITERATOR_TRAITS
548 # define BOOST_NO_CV_VOID_SPECIALIZATIONS
551 // Make sure at least one standard library header is included so that library
552 // implementation detection will work, even if no standard headers have been
553 // included in front of a boost header. (Ed Brey 5 Jun 00)
556 // Determine if the standard library implementation is already pulling names
557 // into std. STLport defines the following if so. (Ed Brey 5 Jun 00)
558 # if !defined( __STL_IMPORT_VENDOR_CSTD ) || defined( __STL_NO_CSTD_FUNCTION_IMPORTS )
559 # define BOOST_NO_STDC_NAMESPACE
564 # if defined BOOST_DECL_EXPORTS
565 # if defined BOOST_DECL_IMPORTS
566 # error Not valid to define both BOOST_DECL_EXPORTS and BOOST_DECL_IMPORTS
568 # define BOOST_DECL __declspec(dllexport)
569 # elif defined BOOST_DECL_IMPORTS
570 # define BOOST_DECL __declspec(dllimport)
575 # endif // Microsoft (excluding Intel/EDG frontend)
578 # define BOOST_DECL // default for compilers not needing this decoration.
581 // end of compiler specific portion ----------------------------------------//
583 #if defined(BOOST_NO_LIMITS) || (defined(_RWSTD_VER) && defined(__BORLANDC__) && _RWSTD_VER < 0x020300) || (defined(__SGI_STL_PORT) && __SGI_STL_PORT <= 0x410 && defined(__STL_STATIC_CONST_INIT_BUG))
584 // STLPort 4.0 doesn't define the static constants in numeric_limits<> so that they
585 // can be used at compile time if the compiler bug indicated by
586 // __STL_STATIC_CONST_INIT_BUG is present.
588 // Rogue wave STL (C++ Builder) also has broken numeric_limits
589 // with default template defining members out of line.
590 // However, Compaq C++ also uses RogueWave (version 0x0203) and it's ok.
591 # define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
595 // HP-UX has a nice stdint.h in a different location, see boost/cstdint.hpp
596 # define BOOST_SYSTEM_HAS_STDINT_H
599 #ifndef BOOST_STD_EXTENSION_NAMESPACE
600 # define BOOST_STD_EXTENSION_NAMESPACE std
603 // Check for old name "BOOST_NMEMBER_TEMPLATES" for compatibility -----------//
604 // Don't use BOOST_NMEMBER_TEMPLATES. It is deprecated and will be removed soon.
605 #if defined( BOOST_NMEMBER_TEMPLATES ) && !defined( BOOST_NO_MEMBER_TEMPLATES )
606 #define BOOST_NO_MEMBER_TEMPLATES
609 // BOOST_NO_STDC_NAMESPACE workaround --------------------------------------//
611 // Because std::size_t usage is so common, even in boost headers which do not
612 // otherwise use the C library, the <cstddef> workaround is included here so
613 // that ugly workaround code need not appear in many other boost headers.
614 // NOTE WELL: This is a workaround for non-conforming compilers; <cstddef>
615 // must still be #included in the usual places so that <cstddef> inclusion
616 // works as expected with standard conforming compilers. The resulting
617 // double inclusion of <cstddef> is harmless.
619 # ifdef BOOST_NO_STDC_NAMESPACE
621 namespace std { using ::ptrdiff_t; using ::size_t; }
622 // using ::wchar_t; removed since wchar_t is a C++ built-in type (Ed Brey)
625 #ifdef BOOST_NO_STD_MIN_MAX
628 inline const _Tp& min(const _Tp& __a, const _Tp& __b) {
629 return __b < __a ? __b : __a;
632 inline const _Tp& max(const _Tp& __a, const _Tp& __b) {
633 return __a < __b ? __b : __a;
636 inline long min(long __a, long __b) {
637 return __b < __a ? __b : __a;
639 inline long max(long __a, long __b) {
640 return __a < __b ? __b : __a;
646 // BOOST_STATIC_CONSTANT workaround --------------------------------------- //
647 // On compilers which don't allow in-class initialization of static integral
648 // constant members, we must use enums as a workaround if we want the constants
649 // to be available at compile-time. This macro gives us a convenient way to
650 // declare such constants.
651 #ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
652 # define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment }
654 # define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment
657 #endif // BOOST_CONFIG_HPP