]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // (C) Copyright John Maddock 2001 - 2003. |
2 | // (C) Copyright Darin Adler 2001 - 2002. | |
3 | // (C) Copyright Peter Dimov 2001. | |
4 | // (C) Copyright Aleksey Gurtovoy 2002. | |
5 | // (C) Copyright David Abrahams 2002 - 2003. | |
6 | // (C) Copyright Beman Dawes 2002 - 2003. | |
7 | // Use, modification and distribution are subject to the | |
8 | // Boost Software License, Version 1.0. (See accompanying file | |
9 | // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
10 | ||
11 | // See http://www.boost.org for most recent version. | |
12 | // | |
13 | // Microsoft Visual C++ compiler setup: | |
14 | // | |
15 | // We need to be careful with the checks in this file, as contrary | |
16 | // to popular belief there are versions with _MSC_VER with the final | |
17 | // digit non-zero (mainly the MIPS cross compiler). | |
18 | // | |
19 | // So we either test _MSC_VER >= XXXX or else _MSC_VER < XXXX. | |
20 | // No other comparisons (==, >, or <=) are safe. | |
21 | // | |
22 | ||
23 | #define BOOST_MSVC _MSC_VER | |
24 | ||
25 | // | |
26 | // Helper macro BOOST_MSVC_FULL_VER for use in Boost code: | |
27 | // | |
28 | #if _MSC_FULL_VER > 100000000 | |
29 | # define BOOST_MSVC_FULL_VER _MSC_FULL_VER | |
30 | #else | |
31 | # define BOOST_MSVC_FULL_VER (_MSC_FULL_VER * 10) | |
32 | #endif | |
33 | ||
34 | // Attempt to suppress VC6 warnings about the length of decorated names (obsolete): | |
35 | #pragma warning( disable : 4503 ) // warning: decorated name length exceeded | |
36 | ||
37 | #define BOOST_HAS_PRAGMA_ONCE | |
38 | ||
39 | // | |
40 | // versions check: | |
41 | // we don't support Visual C++ prior to version 7.1: | |
42 | #if _MSC_VER < 1310 | |
43 | # error "Compiler not supported or configured - please reconfigure" | |
44 | #endif | |
45 | ||
46 | #if _MSC_FULL_VER < 180020827 | |
47 | # define BOOST_NO_FENV_H | |
48 | #endif | |
49 | ||
50 | #if _MSC_VER < 1400 | |
51 | // although a conforming signature for swprint exists in VC7.1 | |
52 | // it appears not to actually work: | |
53 | # define BOOST_NO_SWPRINTF | |
54 | // Our extern template tests also fail for this compiler: | |
55 | # define BOOST_NO_CXX11_EXTERN_TEMPLATE | |
56 | // Variadic macros do not exist for VC7.1 and lower | |
57 | # define BOOST_NO_CXX11_VARIADIC_MACROS | |
58 | # define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS | |
59 | #endif | |
60 | ||
61 | #if _MSC_VER < 1500 // 140X == VC++ 8.0 | |
62 | # define BOOST_NO_MEMBER_TEMPLATE_FRIENDS | |
63 | #endif | |
64 | ||
65 | #if _MSC_VER < 1600 // 150X == VC++ 9.0 | |
66 | // A bug in VC9: | |
67 | # define BOOST_NO_ADL_BARRIER | |
68 | #endif | |
69 | ||
70 | ||
71 | #ifndef _NATIVE_WCHAR_T_DEFINED | |
72 | # define BOOST_NO_INTRINSIC_WCHAR_T | |
73 | #endif | |
74 | ||
75 | // | |
76 | // check for exception handling support: | |
77 | #if !defined(_CPPUNWIND) && !defined(BOOST_NO_EXCEPTIONS) | |
78 | # define BOOST_NO_EXCEPTIONS | |
79 | #endif | |
80 | ||
81 | // | |
82 | // __int64 support: | |
83 | // | |
84 | #define BOOST_HAS_MS_INT64 | |
85 | #if defined(_MSC_EXTENSIONS) || (_MSC_VER >= 1400) | |
86 | # define BOOST_HAS_LONG_LONG | |
87 | #else | |
88 | # define BOOST_NO_LONG_LONG | |
89 | #endif | |
90 | #if (_MSC_VER >= 1400) && !defined(_DEBUG) | |
91 | # define BOOST_HAS_NRVO | |
92 | #endif | |
93 | #if _MSC_VER >= 1600 // 160X == VC++ 10.0 | |
94 | # define BOOST_HAS_PRAGMA_DETECT_MISMATCH | |
95 | #endif | |
96 | // | |
97 | // disable Win32 API's if compiler extensions are | |
98 | // turned off: | |
99 | // | |
100 | #if !defined(_MSC_EXTENSIONS) && !defined(BOOST_DISABLE_WIN32) | |
101 | # define BOOST_DISABLE_WIN32 | |
102 | #endif | |
103 | #if !defined(_CPPRTTI) && !defined(BOOST_NO_RTTI) | |
104 | # define BOOST_NO_RTTI | |
105 | #endif | |
106 | ||
107 | // | |
108 | // TR1 features: | |
109 | // | |
110 | #if _MSC_VER >= 1700 | |
111 | // # define BOOST_HAS_TR1_HASH // don't know if this is true yet. | |
112 | // # define BOOST_HAS_TR1_TYPE_TRAITS // don't know if this is true yet. | |
113 | # define BOOST_HAS_TR1_UNORDERED_MAP | |
114 | # define BOOST_HAS_TR1_UNORDERED_SET | |
115 | #endif | |
116 | ||
117 | // | |
118 | // C++0x features | |
119 | // | |
120 | // See above for BOOST_NO_LONG_LONG | |
121 | ||
122 | // C++ features supported by VC++ 10 (aka 2010) | |
123 | // | |
124 | #if _MSC_VER < 1600 | |
125 | # define BOOST_NO_CXX11_AUTO_DECLARATIONS | |
126 | # define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS | |
127 | # define BOOST_NO_CXX11_LAMBDAS | |
128 | # define BOOST_NO_CXX11_RVALUE_REFERENCES | |
129 | # define BOOST_NO_CXX11_STATIC_ASSERT | |
130 | # define BOOST_NO_CXX11_NULLPTR | |
131 | # define BOOST_NO_CXX11_DECLTYPE | |
132 | #endif // _MSC_VER < 1600 | |
133 | ||
134 | #if _MSC_VER >= 1600 | |
135 | # define BOOST_HAS_STDINT_H | |
136 | #endif | |
137 | ||
138 | // C++11 features supported by VC++ 11 (aka 2012) | |
139 | // | |
140 | #if _MSC_VER < 1700 | |
141 | # define BOOST_NO_CXX11_FINAL | |
142 | # define BOOST_NO_CXX11_RANGE_BASED_FOR | |
143 | # define BOOST_NO_CXX11_SCOPED_ENUMS | |
144 | #endif // _MSC_VER < 1700 | |
145 | ||
146 | // C++11 features supported by VC++ 12 (aka 2013). | |
147 | // | |
148 | #if _MSC_FULL_VER < 180020827 | |
149 | # define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS | |
150 | # define BOOST_NO_CXX11_DELETED_FUNCTIONS | |
151 | # define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS | |
152 | # define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS | |
153 | # define BOOST_NO_CXX11_RAW_LITERALS | |
154 | # define BOOST_NO_CXX11_TEMPLATE_ALIASES | |
155 | # define BOOST_NO_CXX11_TRAILING_RESULT_TYPES | |
156 | # define BOOST_NO_CXX11_VARIADIC_TEMPLATES | |
157 | # define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX | |
158 | # define BOOST_NO_CXX11_DECLTYPE_N3276 | |
159 | #endif | |
160 | ||
161 | #if _MSC_FULL_VER >= 180020827 | |
162 | #define BOOST_HAS_EXPM1 | |
163 | #define BOOST_HAS_LOG1P | |
164 | #endif | |
165 | ||
166 | // C++11 features supported by VC++ 14 (aka 2015) | |
167 | // | |
168 | #if (_MSC_FULL_VER < 190023026) | |
169 | # define BOOST_NO_CXX11_NOEXCEPT | |
170 | # define BOOST_NO_CXX11_REF_QUALIFIERS | |
171 | # define BOOST_NO_CXX11_USER_DEFINED_LITERALS | |
172 | # define BOOST_NO_CXX11_ALIGNAS | |
173 | # define BOOST_NO_CXX11_INLINE_NAMESPACES | |
174 | # define BOOST_NO_CXX11_CHAR16_T | |
175 | # define BOOST_NO_CXX11_CHAR32_T | |
176 | # define BOOST_NO_CXX11_UNICODE_LITERALS | |
177 | # define BOOST_NO_CXX14_DECLTYPE_AUTO | |
178 | # define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES | |
179 | # define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION | |
180 | # define BOOST_NO_CXX14_BINARY_LITERALS | |
181 | # define BOOST_NO_CXX14_GENERIC_LAMBDAS | |
182 | # define BOOST_NO_CXX14_DIGIT_SEPARATORS | |
183 | # define BOOST_NO_CXX11_THREAD_LOCAL | |
184 | #endif | |
185 | // C++11 features supported by VC++ 14 update 3 (aka 2015) | |
186 | // | |
187 | #if (_MSC_FULL_VER < 190024210) | |
188 | # define BOOST_NO_CXX14_VARIABLE_TEMPLATES | |
189 | # define BOOST_NO_SFINAE_EXPR | |
190 | # define BOOST_NO_CXX11_CONSTEXPR | |
191 | #endif | |
192 | ||
193 | // MSVC including version 14 has not yet completely | |
194 | // implemented value-initialization, as is reported: | |
195 | // "VC++ does not value-initialize members of derived classes without | |
196 | // user-declared constructor", reported in 2009 by Sylvester Hesp: | |
197 | // https://connect.microsoft.com/VisualStudio/feedback/details/484295 | |
198 | // "Presence of copy constructor breaks member class initialization", | |
199 | // reported in 2009 by Alex Vakulenko: | |
200 | // https://connect.microsoft.com/VisualStudio/feedback/details/499606 | |
201 | // "Value-initialization in new-expression", reported in 2005 by | |
202 | // Pavel Kuznetsov (MetaCommunications Engineering): | |
203 | // https://connect.microsoft.com/VisualStudio/feedback/details/100744 | |
204 | // Reported again by John Maddock in 2015 for VC14: | |
205 | // https://connect.microsoft.com/VisualStudio/feedback/details/1582233/c-subobjects-still-not-value-initialized-correctly | |
206 | // See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues | |
207 | // (Niels Dekker, LKEB, May 2010) | |
208 | #define BOOST_NO_COMPLETE_VALUE_INITIALIZATION | |
209 | // | |
210 | // C++ 11: | |
211 | // | |
212 | #define BOOST_NO_TWO_PHASE_NAME_LOOKUP | |
213 | // | |
214 | // C++ 14: | |
215 | #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) | |
216 | # define BOOST_NO_CXX14_AGGREGATE_NSDMI | |
217 | #endif | |
218 | #if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304) | |
219 | # define BOOST_NO_CXX14_CONSTEXPR | |
220 | #endif | |
221 | ||
222 | // | |
223 | // prefix and suffix headers: | |
224 | // | |
225 | #ifndef BOOST_ABI_PREFIX | |
226 | # define BOOST_ABI_PREFIX "boost/config/abi/msvc_prefix.hpp" | |
227 | #endif | |
228 | #ifndef BOOST_ABI_SUFFIX | |
229 | # define BOOST_ABI_SUFFIX "boost/config/abi/msvc_suffix.hpp" | |
230 | #endif | |
231 | ||
232 | #ifndef BOOST_COMPILER | |
233 | // TODO: | |
234 | // these things are mostly bogus. 1200 means version 12.0 of the compiler. The | |
235 | // artificial versions assigned to them only refer to the versions of some IDE | |
236 | // these compilers have been shipped with, and even that is not all of it. Some | |
237 | // were shipped with freely downloadable SDKs, others as crosscompilers in eVC. | |
238 | // IOW, you can't use these 'versions' in any sensible way. Sorry. | |
239 | # if defined(UNDER_CE) | |
240 | # if _MSC_VER < 1400 | |
241 | // Note: I'm not aware of any CE compiler with version 13xx | |
242 | # if defined(BOOST_ASSERT_CONFIG) | |
243 | # error "Unknown EVC++ compiler version - please run the configure tests and report the results" | |
244 | # else | |
245 | # pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results") | |
246 | # endif | |
247 | # elif _MSC_VER < 1500 | |
248 | # define BOOST_COMPILER_VERSION evc8 | |
249 | # elif _MSC_VER < 1600 | |
250 | # define BOOST_COMPILER_VERSION evc9 | |
251 | # elif _MSC_VER < 1700 | |
252 | # define BOOST_COMPILER_VERSION evc10 | |
253 | # elif _MSC_VER < 1800 | |
254 | # define BOOST_COMPILER_VERSION evc11 | |
255 | # elif _MSC_VER < 1900 | |
256 | # define BOOST_COMPILER_VERSION evc12 | |
257 | # elif _MSC_VER < 2000 | |
258 | # define BOOST_COMPILER_VERSION evc14 | |
259 | # else | |
260 | # if defined(BOOST_ASSERT_CONFIG) | |
261 | # error "Unknown EVC++ compiler version - please run the configure tests and report the results" | |
262 | # else | |
263 | # pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results") | |
264 | # endif | |
265 | # endif | |
266 | # else | |
267 | # if _MSC_VER < 1310 | |
268 | // Note: Versions up to 7.0 aren't supported. | |
269 | # define BOOST_COMPILER_VERSION 5.0 | |
270 | # elif _MSC_VER < 1300 | |
271 | # define BOOST_COMPILER_VERSION 6.0 | |
272 | # elif _MSC_VER < 1310 | |
273 | # define BOOST_COMPILER_VERSION 7.0 | |
274 | # elif _MSC_VER < 1400 | |
275 | # define BOOST_COMPILER_VERSION 7.1 | |
276 | # elif _MSC_VER < 1500 | |
277 | # define BOOST_COMPILER_VERSION 8.0 | |
278 | # elif _MSC_VER < 1600 | |
279 | # define BOOST_COMPILER_VERSION 9.0 | |
280 | # elif _MSC_VER < 1700 | |
281 | # define BOOST_COMPILER_VERSION 10.0 | |
282 | # elif _MSC_VER < 1800 | |
283 | # define BOOST_COMPILER_VERSION 11.0 | |
284 | # elif _MSC_VER < 1900 | |
285 | # define BOOST_COMPILER_VERSION 12.0 | |
286 | # elif _MSC_VER < 2000 | |
287 | # define BOOST_COMPILER_VERSION 14.0 | |
288 | # else | |
289 | # define BOOST_COMPILER_VERSION _MSC_VER | |
290 | # endif | |
291 | # endif | |
292 | ||
293 | # define BOOST_COMPILER "Microsoft Visual C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) | |
294 | #endif | |
295 | ||
296 | // | |
297 | // last known and checked version is 19.00.23026 (VC++ 2015 RTM): | |
298 | #if (_MSC_VER > 1900) | |
299 | # if defined(BOOST_ASSERT_CONFIG) | |
300 | # error "Unknown compiler version - please run the configure tests and report the results" | |
301 | # else | |
302 | # pragma message("Unknown compiler version - please run the configure tests and report the results") | |
303 | # endif | |
304 | #endif |