]>
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 | ||
92f5a8d4 TL |
46 | // VS2005 (VC8) docs: __assume has been in Visual C++ for multiple releases |
47 | #define BOOST_UNREACHABLE_RETURN(x) __assume(0); | |
48 | ||
7c673cae FG |
49 | #if _MSC_FULL_VER < 180020827 |
50 | # define BOOST_NO_FENV_H | |
51 | #endif | |
52 | ||
53 | #if _MSC_VER < 1400 | |
54 | // although a conforming signature for swprint exists in VC7.1 | |
55 | // it appears not to actually work: | |
56 | # define BOOST_NO_SWPRINTF | |
57 | // Our extern template tests also fail for this compiler: | |
58 | # define BOOST_NO_CXX11_EXTERN_TEMPLATE | |
59 | // Variadic macros do not exist for VC7.1 and lower | |
60 | # define BOOST_NO_CXX11_VARIADIC_MACROS | |
61 | # define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS | |
62 | #endif | |
63 | ||
64 | #if _MSC_VER < 1500 // 140X == VC++ 8.0 | |
65 | # define BOOST_NO_MEMBER_TEMPLATE_FRIENDS | |
66 | #endif | |
67 | ||
68 | #if _MSC_VER < 1600 // 150X == VC++ 9.0 | |
69 | // A bug in VC9: | |
70 | # define BOOST_NO_ADL_BARRIER | |
71 | #endif | |
72 | ||
73 | ||
74 | #ifndef _NATIVE_WCHAR_T_DEFINED | |
75 | # define BOOST_NO_INTRINSIC_WCHAR_T | |
76 | #endif | |
77 | ||
78 | // | |
79 | // check for exception handling support: | |
80 | #if !defined(_CPPUNWIND) && !defined(BOOST_NO_EXCEPTIONS) | |
81 | # define BOOST_NO_EXCEPTIONS | |
82 | #endif | |
83 | ||
84 | // | |
85 | // __int64 support: | |
86 | // | |
87 | #define BOOST_HAS_MS_INT64 | |
88 | #if defined(_MSC_EXTENSIONS) || (_MSC_VER >= 1400) | |
89 | # define BOOST_HAS_LONG_LONG | |
90 | #else | |
91 | # define BOOST_NO_LONG_LONG | |
92 | #endif | |
93 | #if (_MSC_VER >= 1400) && !defined(_DEBUG) | |
94 | # define BOOST_HAS_NRVO | |
95 | #endif | |
96 | #if _MSC_VER >= 1600 // 160X == VC++ 10.0 | |
97 | # define BOOST_HAS_PRAGMA_DETECT_MISMATCH | |
98 | #endif | |
99 | // | |
100 | // disable Win32 API's if compiler extensions are | |
101 | // turned off: | |
102 | // | |
103 | #if !defined(_MSC_EXTENSIONS) && !defined(BOOST_DISABLE_WIN32) | |
104 | # define BOOST_DISABLE_WIN32 | |
105 | #endif | |
106 | #if !defined(_CPPRTTI) && !defined(BOOST_NO_RTTI) | |
107 | # define BOOST_NO_RTTI | |
108 | #endif | |
109 | ||
110 | // | |
111 | // TR1 features: | |
112 | // | |
b32b8144 | 113 | #if (_MSC_VER >= 1700) && defined(_HAS_CXX17) && (_HAS_CXX17 > 0) |
92f5a8d4 TL |
114 | // # define BOOST_HAS_TR1_HASH // don't know if this is true yet. |
115 | // # define BOOST_HAS_TR1_TYPE_TRAITS // don't know if this is true yet. | |
7c673cae FG |
116 | # define BOOST_HAS_TR1_UNORDERED_MAP |
117 | # define BOOST_HAS_TR1_UNORDERED_SET | |
118 | #endif | |
119 | ||
120 | // | |
121 | // C++0x features | |
122 | // | |
123 | // See above for BOOST_NO_LONG_LONG | |
124 | ||
125 | // C++ features supported by VC++ 10 (aka 2010) | |
126 | // | |
127 | #if _MSC_VER < 1600 | |
128 | # define BOOST_NO_CXX11_AUTO_DECLARATIONS | |
129 | # define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS | |
130 | # define BOOST_NO_CXX11_LAMBDAS | |
131 | # define BOOST_NO_CXX11_RVALUE_REFERENCES | |
132 | # define BOOST_NO_CXX11_STATIC_ASSERT | |
133 | # define BOOST_NO_CXX11_NULLPTR | |
134 | # define BOOST_NO_CXX11_DECLTYPE | |
135 | #endif // _MSC_VER < 1600 | |
136 | ||
137 | #if _MSC_VER >= 1600 | |
138 | # define BOOST_HAS_STDINT_H | |
139 | #endif | |
140 | ||
141 | // C++11 features supported by VC++ 11 (aka 2012) | |
142 | // | |
143 | #if _MSC_VER < 1700 | |
144 | # define BOOST_NO_CXX11_FINAL | |
145 | # define BOOST_NO_CXX11_RANGE_BASED_FOR | |
146 | # define BOOST_NO_CXX11_SCOPED_ENUMS | |
20effc67 | 147 | # define BOOST_NO_CXX11_OVERRIDE |
7c673cae FG |
148 | #endif // _MSC_VER < 1700 |
149 | ||
150 | // C++11 features supported by VC++ 12 (aka 2013). | |
151 | // | |
152 | #if _MSC_FULL_VER < 180020827 | |
153 | # define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS | |
154 | # define BOOST_NO_CXX11_DELETED_FUNCTIONS | |
155 | # define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS | |
156 | # define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS | |
157 | # define BOOST_NO_CXX11_RAW_LITERALS | |
158 | # define BOOST_NO_CXX11_TEMPLATE_ALIASES | |
159 | # define BOOST_NO_CXX11_TRAILING_RESULT_TYPES | |
160 | # define BOOST_NO_CXX11_VARIADIC_TEMPLATES | |
161 | # define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX | |
162 | # define BOOST_NO_CXX11_DECLTYPE_N3276 | |
163 | #endif | |
164 | ||
165 | #if _MSC_FULL_VER >= 180020827 | |
166 | #define BOOST_HAS_EXPM1 | |
167 | #define BOOST_HAS_LOG1P | |
168 | #endif | |
169 | ||
170 | // C++11 features supported by VC++ 14 (aka 2015) | |
171 | // | |
172 | #if (_MSC_FULL_VER < 190023026) | |
173 | # define BOOST_NO_CXX11_NOEXCEPT | |
11fdf7f2 | 174 | # define BOOST_NO_CXX11_DEFAULTED_MOVES |
7c673cae FG |
175 | # define BOOST_NO_CXX11_REF_QUALIFIERS |
176 | # define BOOST_NO_CXX11_USER_DEFINED_LITERALS | |
177 | # define BOOST_NO_CXX11_ALIGNAS | |
178 | # define BOOST_NO_CXX11_INLINE_NAMESPACES | |
179 | # define BOOST_NO_CXX11_CHAR16_T | |
180 | # define BOOST_NO_CXX11_CHAR32_T | |
181 | # define BOOST_NO_CXX11_UNICODE_LITERALS | |
182 | # define BOOST_NO_CXX14_DECLTYPE_AUTO | |
183 | # define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES | |
184 | # define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION | |
185 | # define BOOST_NO_CXX14_BINARY_LITERALS | |
186 | # define BOOST_NO_CXX14_GENERIC_LAMBDAS | |
187 | # define BOOST_NO_CXX14_DIGIT_SEPARATORS | |
188 | # define BOOST_NO_CXX11_THREAD_LOCAL | |
f67539c2 | 189 | # define BOOST_NO_CXX11_UNRESTRICTED_UNION |
7c673cae FG |
190 | #endif |
191 | // C++11 features supported by VC++ 14 update 3 (aka 2015) | |
192 | // | |
193 | #if (_MSC_FULL_VER < 190024210) | |
194 | # define BOOST_NO_CXX14_VARIABLE_TEMPLATES | |
195 | # define BOOST_NO_SFINAE_EXPR | |
196 | # define BOOST_NO_CXX11_CONSTEXPR | |
197 | #endif | |
198 | ||
b32b8144 FG |
199 | // C++14 features supported by VC++ 14.1 (Visual Studio 2017) |
200 | // | |
201 | #if (_MSC_VER < 1910) | |
202 | # define BOOST_NO_CXX14_AGGREGATE_NSDMI | |
203 | #endif | |
204 | ||
205 | // C++17 features supported by VC++ 14.1 (Visual Studio 2017) Update 3 | |
206 | // | |
207 | #if (_MSC_VER < 1911) || (_MSVC_LANG < 201703) | |
208 | # define BOOST_NO_CXX17_STRUCTURED_BINDINGS | |
92f5a8d4 TL |
209 | # define BOOST_NO_CXX17_IF_CONSTEXPR |
210 | // Let the defaults handle these now: | |
211 | //# define BOOST_NO_CXX17_HDR_OPTIONAL | |
212 | //# define BOOST_NO_CXX17_HDR_STRING_VIEW | |
b32b8144 FG |
213 | #endif |
214 | ||
7c673cae FG |
215 | // MSVC including version 14 has not yet completely |
216 | // implemented value-initialization, as is reported: | |
217 | // "VC++ does not value-initialize members of derived classes without | |
218 | // user-declared constructor", reported in 2009 by Sylvester Hesp: | |
219 | // https://connect.microsoft.com/VisualStudio/feedback/details/484295 | |
220 | // "Presence of copy constructor breaks member class initialization", | |
221 | // reported in 2009 by Alex Vakulenko: | |
222 | // https://connect.microsoft.com/VisualStudio/feedback/details/499606 | |
223 | // "Value-initialization in new-expression", reported in 2005 by | |
224 | // Pavel Kuznetsov (MetaCommunications Engineering): | |
225 | // https://connect.microsoft.com/VisualStudio/feedback/details/100744 | |
226 | // Reported again by John Maddock in 2015 for VC14: | |
227 | // https://connect.microsoft.com/VisualStudio/feedback/details/1582233/c-subobjects-still-not-value-initialized-correctly | |
228 | // See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues | |
229 | // (Niels Dekker, LKEB, May 2010) | |
11fdf7f2 | 230 | // Still present in VC15.5, Dec 2017. |
7c673cae FG |
231 | #define BOOST_NO_COMPLETE_VALUE_INITIALIZATION |
232 | // | |
233 | // C++ 11: | |
234 | // | |
11fdf7f2 TL |
235 | // This is supported with /permissive- for 15.5 onwards, unfortunately we appear to have no way to tell |
236 | // if this is in effect or not, in any case nothing in Boost is currently using this, so we'll just go | |
237 | // on defining it for now: | |
238 | // | |
1e59de90 | 239 | #if (_MSC_FULL_VER < 193030705) || (_MSVC_LANG < 202004) |
11fdf7f2 | 240 | # define BOOST_NO_TWO_PHASE_NAME_LOOKUP |
1e59de90 | 241 | #endif |
11fdf7f2 TL |
242 | |
243 | #if (_MSC_VER < 1912) || (_MSVC_LANG < 201402) | |
244 | // Supported from msvc-15.5 onwards: | |
b32b8144 | 245 | #define BOOST_NO_CXX11_SFINAE_EXPR |
11fdf7f2 | 246 | #endif |
92f5a8d4 | 247 | #if (_MSC_VER < 1915) || (_MSVC_LANG < 201402) |
7c673cae | 248 | // C++ 14: |
11fdf7f2 | 249 | // Still gives internal compiler error for msvc-15.5: |
7c673cae | 250 | # define BOOST_NO_CXX14_CONSTEXPR |
92f5a8d4 | 251 | #endif |
b32b8144 | 252 | // C++ 17: |
11fdf7f2 | 253 | #if (_MSC_VER < 1912) || (_MSVC_LANG < 201703) |
b32b8144 FG |
254 | #define BOOST_NO_CXX17_INLINE_VARIABLES |
255 | #define BOOST_NO_CXX17_FOLD_EXPRESSIONS | |
11fdf7f2 | 256 | #endif |
b32b8144 FG |
257 | |
258 | // | |
259 | // Things that don't work in clr mode: | |
260 | // | |
261 | #ifdef _M_CEE | |
262 | #ifndef BOOST_NO_CXX11_THREAD_LOCAL | |
263 | # define BOOST_NO_CXX11_THREAD_LOCAL | |
264 | #endif | |
265 | #ifndef BOOST_NO_SFINAE_EXPR | |
266 | # define BOOST_NO_SFINAE_EXPR | |
267 | #endif | |
268 | #ifndef BOOST_NO_CXX11_REF_QUALIFIERS | |
269 | # define BOOST_NO_CXX11_REF_QUALIFIERS | |
270 | #endif | |
271 | #endif | |
272 | #ifdef _M_CEE_PURE | |
273 | #ifndef BOOST_NO_CXX11_CONSTEXPR | |
274 | # define BOOST_NO_CXX11_CONSTEXPR | |
275 | #endif | |
7c673cae FG |
276 | #endif |
277 | ||
278 | // | |
279 | // prefix and suffix headers: | |
280 | // | |
281 | #ifndef BOOST_ABI_PREFIX | |
282 | # define BOOST_ABI_PREFIX "boost/config/abi/msvc_prefix.hpp" | |
283 | #endif | |
284 | #ifndef BOOST_ABI_SUFFIX | |
285 | # define BOOST_ABI_SUFFIX "boost/config/abi/msvc_suffix.hpp" | |
286 | #endif | |
287 | ||
1e59de90 TL |
288 | // |
289 | // Approximate compiler conformance version | |
290 | // | |
291 | #ifdef _MSVC_LANG | |
292 | # define BOOST_CXX_VERSION _MSVC_LANG | |
293 | #elif defined(_HAS_CXX17) | |
294 | # define BOOST_CXX_VERSION 201703L | |
295 | #elif BOOST_MSVC >= 1916 | |
296 | # define BOOST_CXX_VERSION 201402L | |
297 | #endif | |
298 | ||
7c673cae FG |
299 | #ifndef BOOST_COMPILER |
300 | // TODO: | |
301 | // these things are mostly bogus. 1200 means version 12.0 of the compiler. The | |
302 | // artificial versions assigned to them only refer to the versions of some IDE | |
303 | // these compilers have been shipped with, and even that is not all of it. Some | |
304 | // were shipped with freely downloadable SDKs, others as crosscompilers in eVC. | |
305 | // IOW, you can't use these 'versions' in any sensible way. Sorry. | |
306 | # if defined(UNDER_CE) | |
307 | # if _MSC_VER < 1400 | |
308 | // Note: I'm not aware of any CE compiler with version 13xx | |
309 | # if defined(BOOST_ASSERT_CONFIG) | |
92f5a8d4 | 310 | # error "boost: Unknown EVC++ compiler version - please run the configure tests and report the results" |
7c673cae | 311 | # else |
92f5a8d4 | 312 | # pragma message("boost: Unknown EVC++ compiler version - please run the configure tests and report the results") |
7c673cae FG |
313 | # endif |
314 | # elif _MSC_VER < 1500 | |
315 | # define BOOST_COMPILER_VERSION evc8 | |
316 | # elif _MSC_VER < 1600 | |
317 | # define BOOST_COMPILER_VERSION evc9 | |
318 | # elif _MSC_VER < 1700 | |
319 | # define BOOST_COMPILER_VERSION evc10 | |
320 | # elif _MSC_VER < 1800 | |
321 | # define BOOST_COMPILER_VERSION evc11 | |
322 | # elif _MSC_VER < 1900 | |
323 | # define BOOST_COMPILER_VERSION evc12 | |
324 | # elif _MSC_VER < 2000 | |
325 | # define BOOST_COMPILER_VERSION evc14 | |
326 | # else | |
327 | # if defined(BOOST_ASSERT_CONFIG) | |
92f5a8d4 | 328 | # error "boost: Unknown EVC++ compiler version - please run the configure tests and report the results" |
7c673cae | 329 | # else |
92f5a8d4 | 330 | # pragma message("boost: Unknown EVC++ compiler version - please run the configure tests and report the results") |
7c673cae FG |
331 | # endif |
332 | # endif | |
333 | # else | |
b32b8144 | 334 | # if _MSC_VER < 1200 |
92f5a8d4 | 335 | // Note: Versions up to 10.0 aren't supported. |
7c673cae FG |
336 | # define BOOST_COMPILER_VERSION 5.0 |
337 | # elif _MSC_VER < 1300 | |
338 | # define BOOST_COMPILER_VERSION 6.0 | |
339 | # elif _MSC_VER < 1310 | |
340 | # define BOOST_COMPILER_VERSION 7.0 | |
341 | # elif _MSC_VER < 1400 | |
342 | # define BOOST_COMPILER_VERSION 7.1 | |
343 | # elif _MSC_VER < 1500 | |
344 | # define BOOST_COMPILER_VERSION 8.0 | |
345 | # elif _MSC_VER < 1600 | |
346 | # define BOOST_COMPILER_VERSION 9.0 | |
347 | # elif _MSC_VER < 1700 | |
348 | # define BOOST_COMPILER_VERSION 10.0 | |
349 | # elif _MSC_VER < 1800 | |
350 | # define BOOST_COMPILER_VERSION 11.0 | |
351 | # elif _MSC_VER < 1900 | |
352 | # define BOOST_COMPILER_VERSION 12.0 | |
b32b8144 | 353 | # elif _MSC_VER < 1910 |
7c673cae | 354 | # define BOOST_COMPILER_VERSION 14.0 |
b32b8144 FG |
355 | # elif _MSC_VER < 1920 |
356 | # define BOOST_COMPILER_VERSION 14.1 | |
92f5a8d4 TL |
357 | # elif _MSC_VER < 1930 |
358 | # define BOOST_COMPILER_VERSION 14.2 | |
7c673cae FG |
359 | # else |
360 | # define BOOST_COMPILER_VERSION _MSC_VER | |
361 | # endif | |
362 | # endif | |
363 | ||
364 | # define BOOST_COMPILER "Microsoft Visual C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) | |
365 | #endif | |
366 | ||
11fdf7f2 TL |
367 | #include <boost/config/pragma_message.hpp> |
368 | ||
7c673cae | 369 | // |
92f5a8d4 TL |
370 | // last known and checked version is 19.20.27508 (VC++ 2019 RC3): |
371 | #if (_MSC_VER > 1920) | |
7c673cae | 372 | # if defined(BOOST_ASSERT_CONFIG) |
b32b8144 FG |
373 | # error "Boost.Config is older than your current compiler version." |
374 | # elif !defined(BOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE) | |
11fdf7f2 TL |
375 | // |
376 | // Disabled as of March 2018 - the pace of VS releases is hard to keep up with | |
377 | // and in any case, we have relatively few defect macros defined now. | |
378 | // BOOST_PRAGMA_MESSAGE("Info: Boost.Config is older than your compiler version - probably nothing bad will happen - but you may wish to look for an updated Boost version. Define BOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE to suppress this message.") | |
7c673cae FG |
379 | # endif |
380 | #endif |