// http://www.boost.org/libs/config
// Revision History (excluding minor changes for specific compilers)
+// 29 Mar 01 BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS (Daryle Walker)
+// 16 Mar 01 Added BOOST_VERSION (Jens Maurer)
+// 06 Mar 01 Refactored EDG checks for Intel C++ (Dave Abrahams)
+// 04 Mar 01 Factored EDG checks, added BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+// for Intel C++ 5.0 (Dave Abrahams)
+// 17 Feb 01 BOOST_NO_CV_SPECIALIZATIONS
+// BOOST_NO_CV_VOID_SPECIALIZATIONS (John Maddock)
+// 11 Feb 01 Added BOOST_STATIC_CONSTANT (Dave Abrahams)
// 20 Jan 01 BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS moved here from
// cast.hpp. Added missing BOOST_NO_STRINGSTREAM which some
// boost code seemed to depend on. (Dave Abrahams)
#ifndef BOOST_CONFIG_HPP
#define BOOST_CONFIG_HPP
+#define BOOST_VERSION 102400
+
+// BOOST_VERSION % 100 is the sub-minor version
+// BOOST_VERSION / 100 % 1000 is the minor version
+// BOOST_VERSION / 100000 is the major version
+
+
// Conformance Flag Macros -------------------------------------------------//
//
// Conformance flag macros should identify the absence of C++ Standard
// burden where it should be, on non-conforming compilers. In the future,
// hopefully, less rather than more conformance flags will have to be defined.
+// BOOST_NO_CV_SPECIALIZATIONS: if template specializations for cv-qualified
+// types conflict with a specialization for unqualififed type.
+
+// BOOST_NO_CV_VOID_SPECIALIZATIONS: if template specializations for cv-void
+// types conflict with a specialization for void.
+
// BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP: Compiler does not implement
// argument-dependent lookup (also named Koenig lookup); see std::3.4.2
// [basic.koenig.lookup]
// parameters cannot have a dependent type, for example
// "template<class T, typename T::type value> class X { ... };"
+// BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS: Can only use deduced
+// template arguments when calling function template instantiations.
+
// BOOST_NO_INCLASS_MEMBER_INITIALIZATION: Compiler violates std::9.4.2/4.
// BOOST_NO_INT64_T: <boost/cstdint.hpp> does not support 64-bit integer
// BOOST_NO_AUTO_PTR: If the compiler / library supplies non-standard or broken
// std::auto_ptr.
+// BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING: The compiler does not perform
+// function template ordering or its function template ordering is incorrect.
+//
+// template<typename T> void f(T); // #1
+// template<typename T, typename U> void f(T (*)(U)); // #2
+// void bar(int);
+// f(&bar); // should choose #2.
+
+// BOOST_NO_DEPENDENT_NESTED_DERIVATIONS: The compiler fails to compile
+// a nested class that has a dependent base class:
+// template<typename T>
+// struct foo : public T {
+// template<typename U>
+// struct bar : public T, public U {};
+// };
+
+//
// Compiler Control or Information Macros ----------------------------------//
//
// Compilers often supply features outside of the C++ Standard which need to be
// BOOST_NO_STD_MIN_MAX: The C++ standard library does not provide
// the min() and max() template functions that should be in <algorithm>.
-// Compilers are listed in alphabetic order (except VC++ last - see below)---//
+// Common compiler front-ends precede all compiler checks ------------------//
+
+// Edison Design Group front-ends
+# if defined(__EDG_VERSION__)
+# if __EDG_VERSION__ <= 241
+# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+# endif
+
+# endif
+
+// Compiler-specific checks -------------------------------------------------//
+// Compilers are listed in alphabetic order by vendor name
+// (except VC++ must be last - see below)
+
+// Borland ------------------------------------------------------------------//
+
+#if defined __BORLANDC__
+# define BOOST_NO_SLIST
+# define BOOST_NO_HASH
+// pull in standard library version:
+# include <memory>
+# if __BORLANDC__ <= 0x0551
+# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
+# define BOOST_NO_INTEGRAL_INT64_T
+# define BOOST_NO_PRIVATE_IN_AGGREGATE
+# endif
+# if __BORLANDC__ <= 0x0550
+// Borland C++ Builder 4 and 5:
+# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+# define BOOST_NO_USING_TEMPLATE
+# if __BORLANDC__ == 0x0550
+// Borland C++ Builder 5, command-line compiler 5.5:
+# define BOOST_NO_OPERATORS_IN_NAMESPACE
+# endif
+# endif
+# if defined BOOST_DECL_EXPORTS
+# if defined BOOST_DECL_IMPORTS
+# error Not valid to define both BOOST_DECL_EXPORTS and BOOST_DECL_IMPORTS
+# endif
+# define BOOST_DECL __declspec(dllexport)
+# elif defined BOOST_DECL_IMPORTS
+# define BOOST_DECL __declspec(dllimport)
+# else
+# define BOOST_DECL
+# endif
+#if (__BORLANDC__ == 0x550) || (__BORLANDC__ == 0x551)
+// <climits> is partly broken, some macos define symbols that are really in
+// namespace std, so you end up having to use illegal constructs like
+// std::DBL_MAX, as a fix we'll just include float.h and have done with:
+#include <float.h>
+#endif
+# define BOOST_NO_CV_SPECIALIZATIONS
+# define BOOST_NO_CV_VOID_SPECIALIZATIONS
+
+// Comeau C++ ----------------------------------------------------------------//
+
+# elif defined __COMO__
+# if __COMO_VERSION__ <= 4245
+# define BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
+# if defined(_MSC_VER) && _MSC_VER <= 1200
+# define BOOST_NO_STDC_NAMESPACE
+# endif
+# endif
+
+// Compaq Tru64 Unix cxx ---------------------------------------------------
+
+# elif defined __DECCXX
+# define BOOST_NO_SLIST
+# define BOOST_NO_HASH
// GNU CC (also known as GCC and G++) --------------------------------------//
-# if defined __GNUC__
+# elif defined __GNUC__
# if __GNUC__ == 2 && __GNUC_MINOR__ == 91
// egcs 1.1 won't parse smart_ptr.hpp without this:
# define BOOST_NO_AUTO_PTR
# endif
-# if __GNUC__ == 2 && __GNUC_MINOR__ <= 95
-# include <iterator> // not sure this is the right way to do this -JGS
-# if !defined(_CXXRT_STD) && !defined(__SGI_STL) // need to ask Dietmar about this -JGS
+# if __GNUC__ == 2 && __GNUC_MINOR__ <= 97
+# include <string> // not sure this is the right way to do this -JGS
+# if defined(__BASTRING__) && !defined(__GLIBCPP__) && !defined(_CXXRT_STD) && !defined(__SGI_STL) // need to ask Dietmar about this -JGS
+ // this should only detect the stdlibc++ that ships with gcc, and
+ // not any replacements that may be installed...
# define BOOST_NO_STD_ITERATOR
# define BOOST_NO_LIMITS
# endif
# endif
# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
# define BOOST_NO_OPERATORS_IN_NAMESPACE
+# define BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING
# endif
# if __GNUC__ == 2 && __GNUC_MINOR__ <= 8
# define BOOST_NO_MEMBER_TEMPLATES
# endif
-# if (__GNUC__ == 2 && __GNUC_MINOR__ > 95) || __GNUC__ > 2
- // upcoming gcc 3.0
+# if __GNUC__ >= 3
# include <iterator>
# if defined(__GLIBCPP__)
// The new GNU C++ library has slist, hash_map, hash_set headers
# endif
# endif
-// Kai C++ ------------------------------------------------------------------//
+// Greenhills C++ -----------------------------------------------------------//
-#elif defined __KCC
+#elif defined __ghs
# define BOOST_NO_SLIST
# define BOOST_NO_HASH
-# if __KCC_VERSION <= 4001
- // at least on Sun, the contents of <cwchar> is not in namespace std
-# define BOOST_NO_STDC_NAMESPACE
-# endif
+// HP aCC -------------------------------------------------------------------
-// SGI MIPSpro C++ --------------------------------------------------------
+# elif defined __HP_aCC
+# define BOOST_NO_SLIST
+# define BOOST_NO_HASH
+# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+# define BOOST_NO_OPERATORS_IN_NAMESPACE
+ // (support for HP aCC is not complete, see the regression test results)
-#elif defined __sgi
+// Intel on Linux -----------------------------------------------------------//
-# if defined(__EDG_VERSION__) && __EDG_VERSION__ <= 240
-# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
-# endif
-
-// Compaq Tru64 Unix cxx ---------------------------------------------------
-
-#elif defined __DECCXX
-
-# if defined(__EDG_VERSION__) && __EDG_VERSION__ <= 240
-# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+#elif defined __ICC
+# include <iterator>
+# ifdef _CPPLIB_VER
+ // shipped with Dinkumware 3.10, which has a different hash_map
+# define BOOST_NO_HASH
# endif
-// Greenhills C++ -----------------------------------------------------------//
+// Intel on Windows --------------------------------------------------------//
-#elif defined __ghs
-# define BOOST_NO_SLIST
-# define BOOST_NO_HASH
-
-// Borland ------------------------------------------------------------------//
-
-#elif defined __BORLANDC__
-# define BOOST_NO_SLIST
-# define BOOST_NO_HASH
-# if __BORLANDC__ <= 0x0551
-# define BOOST_NO_INTEGRAL_INT64_T
-# define BOOST_NO_PRIVATE_IN_AGGREGATE
-# endif
-# if __BORLANDC__ <= 0x0550
-// Borland C++ Builder 4 and 5:
-# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
-# define BOOST_NO_USING_TEMPLATE
-# if __BORLANDC__ == 0x0550
-// Borland C++ Builder 5, command-line compiler 5.5:
-# define BOOST_NO_OPERATORS_IN_NAMESPACE
+# elif defined __ICL
+# if __ICL <= 500
+ // Intel C++ 5.0.1 uses EDG 2.45, but fails to activate Koenig lookup
+ // in the frontend even in "strict" mode. (reported by Kirk Klobe)
+# ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
# endif
+# define BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING
+# define BOOST_NO_INTRINSIC_WCHAR_T // tentative addition - required for VC6 compatibility? (added by JM 19 Feb 2001)
# endif
-# if defined BOOST_DECL_EXPORTS
-# if defined BOOST_DECL_IMPORTS
-# error Not valid to define both BOOST_DECL_EXPORTS and BOOST_DECL_IMPORTS
-# endif
-# define BOOST_DECL __declspec(dllexport)
-# elif defined BOOST_DECL_IMPORTS
-# define BOOST_DECL __declspec(dllimport)
-# else
-# define BOOST_DECL
-# endif
-
-// Intel -------------------------------------------------------------------//
-
-# elif defined __ICL
# include <iterator> // not sure this is the right way to do this -JGS
# if __SGI_STL_PORT >= 0x400 || __SGI_STL_PORT >= 0x321 && defined(__STL_USE_NAMESPACES)
// a perfectly good implementation of std::iterator is supplied
# elif defined(__SGI_STL_ITERATOR)
# define BOOST_NO_STD_ITERATOR // No std::iterator in this case
+# elif defined(_CPPLIB_VER) && (_CPPLIB_VER >= 306)
+# // full dinkumware 3.06 and above
+# define BOOST_NO_HASH
+# define BOOST_NO_STD_ITERATOR_TRAITS
+# if !_GLOBAL_USING // can be defined in yvals.h
+# define BOOST_NO_STDC_NAMESPACE
+# endif
# else // assume using dinkumware's STL that comes with VC++ 6.0
# define BOOST_MSVC_STD_ITERATOR
# define BOOST_NO_STD_ITERATOR_TRAITS
# define BOOST_NO_STD_MIN_MAX
# endif
+// Kai C++ ----------------------------------------------------------------
-// Metrowerks CodeWarrior --------------------------------------------------//
+#elif defined __KCC
+# define BOOST_NO_SLIST
+# define BOOST_NO_HASH
+
+# if __KCC_VERSION <= 4001
+ // at least on Sun, the contents of <cwchar> is not in namespace std
+# define BOOST_NO_STDC_NAMESPACE
+# endif
+
+// Metrowerks CodeWarrior -------------------------------------------------//
# elif defined __MWERKS__
-# if __MWERKS__ <= 0x4000
+# if __MWERKS__ <= 0x2405 // 7
# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
# endif
-# if __MWERKS__ <= 0x2301
+# if __MWERKS__ <= 0x2401 // 6.2
+# define BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING
+# endif
+# if __MWERKS__ <= 0x2301 // 5.3
# define BOOST_NO_POINTER_TO_MEMBER_CONST
+# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+# define BOOST_NO_HASH
+# endif
+# if __MWERKS__ >= 0x2400
+# define BOOST_STD_EXTENSION_NAMESPACE Metrowerks
# endif
# if __MWERKS__ >= 0x2300
# define BOOST_SYSTEM_HAS_STDINT_H
# define BOOST_DECL
# endif
-# define BOOST_STD_EXTENSION_NAMESPACE Metrowerks
+// SGI MIPSpro C++ ---------------------------------------------------------//
+
+# elif defined __sgi
+ // This is a generic STLport condition and could be moved elsewhere.
+# include <iterator>
+# if defined(__SGI_STL_PORT) && !defined(__STL_MEMBER_TEMPLATE_CLASSES) && !defined(_STLP_MEMBER_TEMPLATE_CLASSES)
+# define BOOST_NO_STD_ALLOCATOR
+# endif
-// Sun Workshop Compiler C++ ------------------------------------------------//
+// Sun Workshop Compiler C++ -----------------------------------------------//
# elif defined __SUNPRO_CC
# if __SUNPRO_CC <= 0x520
# define BOOST_NO_SLIST
# define BOOST_NO_HASH
# define BOOST_NO_STD_ITERATOR_TRAITS
+# define BOOST_NO_STD_ALLOCATOR
+
+ // although sunpro 5.1 supports the syntax for
+ // inline initialization it often gets the value
+ // wrong, especially where the value is computed
+ // from other constants (J Maddock 6th May 2001)
+# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+
+ // although sunpro 5.1 supports the syntax for
+ // partial specialization, it often seems to
+ // bind to the wrong specialization. Better
+ // to disable it until suppport becomes more stable
+ // (J Maddock 6th May 2001).
+# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
# endif
# if __SUNPRO_CC <= 0x500
# define BOOST_NO_MEMBER_TEMPLATES
# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
# endif
-// Microsoft Visual C++ (excluding Intel/EDG front end) --------------------//
+// Microsoft Visual C++ (excluding Intel/EDG front end) --------------------
//
// Must remain the last #elif since some other vendors (Metrowerks, for
// example) also #define _MSC_VER
# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
# define BOOST_NO_PRIVATE_IN_AGGREGATE
# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
# define BOOST_NO_INTEGRAL_INT64_T
# define BOOST_NO_INTRINSIC_WCHAR_T
# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
-
+# define BOOST_WEAK_FUNCTION_TEMPLATE_ORDERING
# include <iterator> // not sure this is the right way to do this -JGS
# if __SGI_STL_PORT >= 0x400 || __SGI_STL_PORT >= 0x321 && defined(__STL_USE_NAMESPACES)
// a perfectly good implementation of std::iterator is supplied
+ // A conforming allocator is supplied, but the compiler cannot cope
+ // when using "rebind". (Douglas Gregor)
+# define BOOST_NO_STD_ALLOCATOR
# elif defined(__SGI_STL_ITERATOR)
# define BOOST_NO_STD_ITERATOR // No std::iterator in this case
+# elif defined(_CPPLIB_VER) && (_CPPLIB_VER >= 306)
+ // full dinkumware 3.06 and above
+# define BOOST_NO_HASH
+# define BOOST_NO_STD_ITERATOR_TRAITS
+# ifndef _GLOBAL_USING // can be defined in yvals.h
+# define BOOST_NO_STDC_NAMESPACE
+# endif
+# if _CPPLIB_VER < 308 // fix due to kensai@pacbell.net
+# define BOOST_MSVC_STD_ITERATOR
+# endif
# else
-# define BOOST_MSVC_STD_ITERATOR 1
+# define BOOST_MSVC_STD_ITERATOR
# define BOOST_NO_SLIST
# define BOOST_NO_HASH
# define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
# endif
# endif
# define BOOST_NO_STD_ITERATOR_TRAITS
+# define BOOST_NO_CV_VOID_SPECIALIZATIONS
// Make sure at least one standard library header is included so that library
// end of compiler specific portion ----------------------------------------//
-#if defined(BOOST_NO_LIMITS) || \
- (defined(_RWSTD_VER) && _RWSTD_VER < 0x0203) || \
- (defined(__SGI_STL_PORT) && __SGI_STL_PORT <= 0x410 && __STL_STATIC_CONST_INIT_BUG)
+#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))
// STLPort 4.0 doesn't define the static constants in numeric_limits<> so that they
// can be used at compile time if the compiler bug indicated by
// __STL_STATIC_CONST_INIT_BUG is present.
// Rogue wave STL (C++ Builder) also has broken numeric_limits
// with default template defining members out of line.
-// However, Compaq C++ also uses RogueWave (version 2.03) and it's ok.
+// However, Compaq C++ also uses RogueWave (version 0x0203) and it's ok.
# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
#endif
+#if defined(__hpux)
+// HP-UX has a nice stdint.h in a different location, see boost/cstdint.hpp
+# define BOOST_SYSTEM_HAS_STDINT_H
+#endif
+
#ifndef BOOST_STD_EXTENSION_NAMESPACE
# define BOOST_STD_EXTENSION_NAMESPACE std
#endif
}
#endif
+// BOOST_STATIC_CONSTANT workaround --------------------------------------- //
+// On compilers which don't allow in-class initialization of static integral
+// constant members, we must use enums as a workaround if we want the constants
+// to be available at compile-time. This macro gives us a convenient way to
+// declare such constants.
+#ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+# define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment }
+#else
+# define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment
+#endif
+
#endif // BOOST_CONFIG_HPP
+
+
+
+
+
+