1 // (C) Copyright John Maddock 2005-7.
2 // Use, modification and distribution are subject to the
3 // Boost Software License, Version 1.0. (See accompanying file
4 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 #ifndef BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED
7 # define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED
11 #if defined(__GNUC__) || (!defined(_AIX) && defined(__IBMCPP__) && (__IBMCPP__ >= 800))
12 #if !defined(BOOST_HAS_INCLUDE_NEXT)
13 # define BOOST_HAS_INCLUDE_NEXT
15 // Need to find out if we're using GLIBC:
16 #ifdef BOOST_TR1_UTILITY_INCLUDED
17 // Oops we're in a recursive include path!!
18 // Need to include utility, or some std lib header,
19 // but *not* via <utility> or <boost/config/no_tr1/utility.hpp>
20 # ifndef BOOST_TR1_NO_RECURSION
21 # define BOOST_TR1_NO_RECURSION
22 # define BOOST_TR1_NO_CONFIG_RECURSION
24 # if defined(BOOST_HAS_INCLUDE_NEXT) && !defined(BOOST_TR1_DISABLE_INCLUDE_NEXT)
25 # include_next <utility>
27 # include BOOST_TR1_STD_HEADER(utility)
29 # ifdef BOOST_TR1_NO_CONFIG_RECURSION
30 # undef BOOST_TR1_NO_CONFIG_RECURSION
31 # undef BOOST_TR1_NO_RECURSION
34 #include <boost/config/no_tr1/utility.hpp>
38 #if defined(__GLIBCXX__) && !defined(BOOST_TR1_PATH)
39 # define BOOST_TR1_PATH(name) tr1/name
41 #if !defined(BOOST_TR1_PATH)
42 # define BOOST_TR1_PATH(name) name
45 #define BOOST_TR1_HEADER(name) <BOOST_TR1_PATH(name)>
47 // Can't use BOOST_WORKAROUND here, it leads to recursive includes:
48 #if (defined(__BORLANDC__) && (__BORLANDC__ <= 0x600)) || (defined(_MSC_VER) && (_MSC_VER < 1310))
49 # define BOOST_TR1_USE_OLD_TUPLE
53 // turn on support for everything:
54 # define BOOST_HAS_TR1
57 #ifdef __GXX_EXPERIMENTAL_CXX0X__
58 # define BOOST_HAS_TR1_COMPLEX_OVERLOADS
59 # define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
63 // turn on support for everything:
64 # define BOOST_HAS_TR1_ARRAY
65 # define BOOST_HAS_TR1_COMPLEX_OVERLOADS
66 # define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
67 # define BOOST_HAS_TR1_REFERENCE_WRAPPER
68 # define BOOST_HAS_TR1_RESULT_OF
69 # define BOOST_HAS_TR1_MEM_FN
70 # define BOOST_HAS_TR1_BIND
71 # define BOOST_HAS_TR1_FUNCTION
72 # define BOOST_HAS_TR1_HASH
73 # define BOOST_HAS_TR1_SHARED_PTR
74 # define BOOST_HAS_TR1_RANDOM
75 # define BOOST_HAS_TR1_REGEX
76 # define BOOST_HAS_TR1_TUPLE
77 # define BOOST_HAS_TR1_TYPE_TRAITS
78 # define BOOST_HAS_TR1_UTILITY
79 # define BOOST_HAS_TR1_UNORDERED_MAP
80 # define BOOST_HAS_TR1_UNORDERED_SET
81 # define BOOST_HAS_TR1_CMATH
85 #if defined(__MWERKS__) && (__MWERKS__ >= 0x3205)
87 // Very preliminary MWCW support, may not be right:
89 # define BOOST_HAS_TR1_SHARED_PTR
90 # define BOOST_HAS_TR1_REFERENCE_WRAPPER
91 # define BOOST_HAS_TR1_FUNCTION
92 # define BOOST_HAS_TR1_TUPLE
93 # define BOOST_HAS_TR1_RESULT_OF
96 #ifdef BOOST_HAS_GCC_TR1
97 // turn on support for everything in gcc 4.0.x:
98 # define BOOST_HAS_TR1_ARRAY
99 #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 403
100 //# define BOOST_HAS_TR1_COMPLEX_OVERLOADS
101 # define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
103 # define BOOST_HAS_TR1_REFERENCE_WRAPPER
104 # define BOOST_HAS_TR1_RESULT_OF
105 # define BOOST_HAS_TR1_MEM_FN
106 # define BOOST_HAS_TR1_BIND
107 # define BOOST_HAS_TR1_FUNCTION
108 # define BOOST_HAS_TR1_HASH
109 # define BOOST_HAS_TR1_SHARED_PTR
110 #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 403
111 # define BOOST_HAS_TR1_RANDOM
112 //# define BOOST_HAS_TR1_REGEX
113 #ifdef _GLIBCXX_USE_C99_MATH_TR1
114 # define BOOST_HAS_TR1_CMATH
117 # define BOOST_HAS_TR1_TUPLE
118 # define BOOST_HAS_TR1_TYPE_TRAITS
119 # define BOOST_HAS_TR1_UTILITY
120 # define BOOST_HAS_TR1_UNORDERED_MAP
121 # define BOOST_HAS_TR1_UNORDERED_SET
125 #if defined(_MSC_VER) && (_MSC_VER >= 1500) \
126 && defined(_MSC_FULL_VER) && \
127 !defined(__SGI_STL_PORT) && \
128 !defined(_STLPORT_VERSION) && \
129 !defined(_RWSTD_VER_STR) && \
132 // MSVC-9.0 defines a not-quite TR1 conforming hash
133 // function object in <functional>, so we must define
134 // this here, in addition the feature pack for VC9
135 // provides a more or less full TR1 implementation:
137 #if defined(_HAS_TR1) && (_HAS_TR1 + 0)
138 # define BOOST_HAS_TR1_ARRAY
139 # define BOOST_HAS_TR1_REFERENCE_WRAPPER
140 # define BOOST_HAS_TR1_RESULT_OF
141 # define BOOST_HAS_TR1_MEM_FN
142 # define BOOST_HAS_TR1_BIND
143 # define BOOST_HAS_TR1_FUNCTION
144 # define BOOST_HAS_TR1_HASH
145 # define BOOST_HAS_TR1_SHARED_PTR
146 # define BOOST_HAS_TR1_RANDOM
147 # define BOOST_HAS_TR1_REGEX
148 # define BOOST_HAS_TR1_TUPLE
149 # define BOOST_HAS_TR1_TYPE_TRAITS
150 # define BOOST_HAS_TR1_UTILITY
151 # define BOOST_HAS_TR1_UNORDERED_MAP
152 # define BOOST_HAS_TR1_UNORDERED_SET
154 # define BOOST_HAS_TR1_HASH
158 #include <boost/config.hpp>