#ifndef BOOST_CONFIG_HPP
#define BOOST_CONFIG_HPP
-#define BOOST_VERSION 102200
+#define BOOST_VERSION 102400
// BOOST_VERSION % 100 is the sub-minor version
// BOOST_VERSION / 100 % 1000 is the minor version
// 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 specialisations for cv-qualified types
-// conflict with a specialistaion for unqualififed type.
+// 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 specialisations for cv-void types
-// conflict with a specialistaion for void.
+// 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
// 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
// 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 (except VC++ last - see below)---//
+// 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__ <= 97
-# include "LString.h" // not sure this is the right way to do this -JGS
+# 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...
# 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__ > 97) || __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
-// Intel on Linux ---------------------------------------------------------
-
-#elif defined __ICC
-# include <iterator>
-# ifdef _CPPLIB_VER
- // shipped with Dinkumware 3.10, which has a different hash_map
-# define BOOST_NO_HASH
-# endif
-
-// Kai C++ ----------------------------------------------------------------
-
-#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
-
-// SGI MIPSpro C++ --------------------------------------------------------
-
-#elif defined __sgi
-
-// Compaq Tru64 Unix cxx ---------------------------------------------------
-
-#elif defined __DECCXX
-# define BOOST_NO_SLIST
-# define BOOST_NO_HASH
-
// Greenhills C++ -----------------------------------------------------------//
#elif defined __ghs
# define BOOST_NO_SLIST
# define BOOST_NO_HASH
-// Borland ------------------------------------------------------------------//
+// HP aCC -------------------------------------------------------------------
-#elif defined __BORLANDC__
-# define BOOST_NO_SLIST
-# define BOOST_NO_HASH
-// pull in standard library version:
-# include <memory>
-# 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
-# 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
+# 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)
+
+// Intel on Linux -----------------------------------------------------------//
+
+#elif defined __ICC
+# include <iterator>
+# ifdef _CPPLIB_VER
+ // shipped with Dinkumware 3.10, which has a different hash_map
+# define BOOST_NO_HASH
# 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
// Intel on Windows --------------------------------------------------------//
# 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
# 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
# define BOOST_NO_STD_ALLOCATOR
# define BOOST_NO_STD_MIN_MAX
# endif
-# define BOOST_NO_INTRINSIC_WCHAR_T // tentative addition - required for VC6 compatibility? (added by JM 19 Feb 2001)
-// Metrowerks CodeWarrior --------------------------------------------------//
+// Kai C++ ----------------------------------------------------------------
+
+#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__ <= 0x2401 // 6.2
+# if __MWERKS__ <= 0x2405 // 7
# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
# endif
+# 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++ ---------------------------------------------------------//
-// Sun Workshop Compiler 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++ -----------------------------------------------//
# 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
# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
# endif
-
-// HP aCC -------------------------------------------------------------------
-
-# 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)
-
// Microsoft Visual C++ (excluding Intel/EDG front end) --------------------
//
// Must remain the last #elif since some other vendors (Metrowerks, for
# 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)
# 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
+