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 // 38 // versions check: 39 // we don't support Visual C++ prior to version 6: 40 #if _MSC_VER < 1200 41 # error "Compiler not supported or configured - please reconfigure" 42 #endif 43 44 #if _MSC_VER < 1300 // 1200 == VC++ 6.0, 1200-1202 == eVC++4 45 # pragma warning( disable : 4786 ) // ident trunc to '255' chars in debug info 46 # define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS 47 # define BOOST_NO_VOID_RETURNS 48 # define BOOST_NO_EXCEPTION_STD_NAMESPACE 49 50 # if _MSC_VER == 1202 51 # define BOOST_NO_STD_TYPEINFO 52 # endif 53 54 #endif 55 56 /// Visual Studio has no fenv.h 57 #define BOOST_NO_FENV_H 58 59 #if (_MSC_VER < 1310) // 130X == VC++ 7.0 60 61 # if !defined(_MSC_EXTENSIONS) && !defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) // VC7 bug with /Za 62 # define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS 63 # endif 64 65 # define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS 66 # define BOOST_NO_INCLASS_MEMBER_INITIALIZATION 67 # define BOOST_NO_PRIVATE_IN_AGGREGATE 68 # define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP 69 # define BOOST_NO_INTEGRAL_INT64_T 70 # define BOOST_NO_DEDUCED_TYPENAME 71 # define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE 72 73 // VC++ 6/7 has member templates but they have numerous problems including 74 // cases of silent failure, so for safety we define: 75 # define BOOST_NO_MEMBER_TEMPLATES 76 // For VC++ experts wishing to attempt workarounds, we define: 77 # define BOOST_MSVC6_MEMBER_TEMPLATES 78 79 # define BOOST_NO_MEMBER_TEMPLATE_FRIENDS 80 # define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION 81 # define BOOST_NO_CV_VOID_SPECIALIZATIONS 82 # define BOOST_NO_FUNCTION_TEMPLATE_ORDERING 83 # define BOOST_NO_USING_TEMPLATE 84 # define BOOST_NO_SWPRINTF 85 # define BOOST_NO_TEMPLATE_TEMPLATES 86 # define BOOST_NO_SFINAE 87 # define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS 88 # define BOOST_NO_IS_ABSTRACT 89 # define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS 90 // TODO: what version is meant here? Have there really been any fixes in cl 12.01 (as e.g. shipped with eVC4)? 91 # if (_MSC_VER >= 1300) 92 # define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS 93 # endif 94 95 #endif 96 97 #if _MSC_VER < 1400 98 // although a conforming signature for swprint exists in VC7.1 99 // it appears not to actually work: 100 # define BOOST_NO_SWPRINTF 101 // Our extern template tests also fail for this compiler: 102 # define BOOST_NO_CXX11_EXTERN_TEMPLATE 103 // Variadic macros do not exist for VC7.1 and lower 104 # define BOOST_NO_CXX11_VARIADIC_MACROS 105 #endif 106 107 #if defined(UNDER_CE) 108 // Windows CE does not have a conforming signature for swprintf 109 # define BOOST_NO_SWPRINTF 110 #endif 111 112 #if _MSC_VER < 1500 // 140X == VC++ 8.0 113 # define BOOST_NO_MEMBER_TEMPLATE_FRIENDS 114 #endif 115 116 #if _MSC_VER < 1600 // 150X == VC++ 9.0 117 // A bug in VC9: 118 # define BOOST_NO_ADL_BARRIER 119 #endif 120 121 122 // MSVC (including the latest checked version) has not yet completely 123 // implemented value-initialization, as is reported: 124 // "VC++ does not value-initialize members of derived classes without 125 // user-declared constructor", reported in 2009 by Sylvester Hesp: 126 // https://connect.microsoft.com/VisualStudio/feedback/details/484295 127 // "Presence of copy constructor breaks member class initialization", 128 // reported in 2009 by Alex Vakulenko: 129 // https://connect.microsoft.com/VisualStudio/feedback/details/499606 130 // "Value-initialization in new-expression", reported in 2005 by 131 // Pavel Kuznetsov (MetaCommunications Engineering): 132 // https://connect.microsoft.com/VisualStudio/feedback/details/100744 133 // See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues 134 // (Niels Dekker, LKEB, May 2010) 135 # define BOOST_NO_COMPLETE_VALUE_INITIALIZATION 136 137 #ifndef _NATIVE_WCHAR_T_DEFINED 138 # define BOOST_NO_INTRINSIC_WCHAR_T 139 #endif 140 141 #if defined(_WIN32_WCE) || defined(UNDER_CE) 142 # define BOOST_NO_SWPRINTF 143 #endif 144 145 // we have ThreadEx or GetSystemTimeAsFileTime unless we're running WindowsCE 146 #if !defined(_WIN32_WCE) && !defined(UNDER_CE) 147 # define BOOST_HAS_THREADEX 148 # define BOOST_HAS_GETSYSTEMTIMEASFILETIME 149 #endif 150 151 // 152 // check for exception handling support: 153 #if !defined(_CPPUNWIND) && !defined(BOOST_NO_EXCEPTIONS) 154 # define BOOST_NO_EXCEPTIONS 155 #endif 156 157 // 158 // __int64 support: 159 // 160 #if (_MSC_VER >= 1200) 161 # define BOOST_HAS_MS_INT64 162 #endif 163 #if (_MSC_VER >= 1310) && (defined(_MSC_EXTENSIONS) || (_MSC_VER >= 1400)) 164 # define BOOST_HAS_LONG_LONG 165 #else 166 # define BOOST_NO_LONG_LONG 167 #endif 168 #if (_MSC_VER >= 1400) && !defined(_DEBUG) 169 # define BOOST_HAS_NRVO 170 #endif 171 // 172 // disable Win32 API's if compiler extentions are 173 // turned off: 174 // 175 #if !defined(_MSC_EXTENSIONS) && !defined(BOOST_DISABLE_WIN32) 176 # define BOOST_DISABLE_WIN32 177 #endif 178 #if !defined(_CPPRTTI) && !defined(BOOST_NO_RTTI) 179 # define BOOST_NO_RTTI 180 #endif 181 182 // 183 // TR1 features: 184 // 185 #if _MSC_VER >= 1700 186 // # define BOOST_HAS_TR1_HASH // don't know if this is true yet. 187 // # define BOOST_HAS_TR1_TYPE_TRAITS // don't know if this is true yet. 188 # define BOOST_HAS_TR1_UNORDERED_MAP 189 # define BOOST_HAS_TR1_UNORDERED_SET 190 #endif 191 192 // 193 // C++0x features 194 // 195 // See above for BOOST_NO_LONG_LONG 196 197 // C++ features supported by VC++ 10 (aka 2010) 198 // 199 #if _MSC_VER < 1600 200 # define BOOST_NO_CXX11_AUTO_DECLARATIONS 201 # define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS 202 # define BOOST_NO_CXX11_LAMBDAS 203 # define BOOST_NO_CXX11_RVALUE_REFERENCES 204 # define BOOST_NO_CXX11_STATIC_ASSERT 205 # define BOOST_NO_CXX11_NULLPTR 206 # define BOOST_NO_CXX11_DECLTYPE 207 #endif // _MSC_VER < 1600 208 209 #if _MSC_VER >= 1600 210 # define BOOST_HAS_STDINT_H 211 #endif 212 213 // C++ features supported by VC++ 11 (aka 2012) 214 // 215 #if _MSC_VER < 1700 216 # define BOOST_NO_CXX11_RANGE_BASED_FOR 217 # define BOOST_NO_CXX11_SCOPED_ENUMS 218 #endif // _MSC_VER < 1700 219 220 // C++11 features supported by VC++ 11 (aka 2012) November 2012 CTP 221 // Because the CTP is unsupported, unrelease, and only alpha quality, 222 // it is only supported if BOOST_MSVC_ENABLE_2012_NOV_CTP is defined. 223 // 224 #if _MSC_FULL_VER < 170051025 || !defined(BOOST_MSVC_ENABLE_2012_NOV_CTP) 225 # define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS 226 # define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS 227 # define BOOST_NO_CXX11_RAW_LITERALS 228 # define BOOST_NO_CXX11_VARIADIC_TEMPLATES 229 # define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX 230 #endif 231 232 // C++11 features not supported by any versions 233 #define BOOST_NO_CXX11_CHAR16_T 234 #define BOOST_NO_CXX11_CHAR32_T 235 #define BOOST_NO_CXX11_CONSTEXPR 236 #define BOOST_NO_CXX11_DECLTYPE_N3276 237 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS 238 #define BOOST_NO_CXX11_DELETED_FUNCTIONS 239 #define BOOST_NO_CXX11_NOEXCEPT 240 #define BOOST_NO_CXX11_TEMPLATE_ALIASES 241 #define BOOST_NO_CXX11_UNICODE_LITERALS 242 #define BOOST_NO_SFINAE_EXPR 243 #define BOOST_NO_TWO_PHASE_NAME_LOOKUP 244 #define BOOST_NO_CXX11_USER_DEFINED_LITERALS 245 246 // 247 // prefix and suffix headers: 248 // 249 #ifndef BOOST_ABI_PREFIX 250 # define BOOST_ABI_PREFIX "cutl/details/boost/config/abi/msvc_prefix.hpp" 251 #endif 252 #ifndef BOOST_ABI_SUFFIX 253 # define BOOST_ABI_SUFFIX "cutl/details/boost/config/abi/msvc_suffix.hpp" 254 #endif 255 256 #ifndef BOOST_COMPILER 257 // TODO: 258 // these things are mostly bogus. 1200 means version 12.0 of the compiler. The 259 // artificial versions assigned to them only refer to the versions of some IDE 260 // these compilers have been shipped with, and even that is not all of it. Some 261 // were shipped with freely downloadable SDKs, others as crosscompilers in eVC. 262 // IOW, you can't use these 'versions' in any sensible way. Sorry. 263 # if defined(UNDER_CE) 264 # if _MSC_VER < 1200 265 // Note: these are so far off, they are not really supported 266 # elif _MSC_VER < 1300 // eVC++ 4 comes with 1200-1202 267 # define BOOST_COMPILER_VERSION evc4.0 268 # elif _MSC_VER < 1400 269 // Note: I'm not aware of any CE compiler with version 13xx 270 # if defined(BOOST_ASSERT_CONFIG) 271 # error "Unknown EVC++ compiler version - please run the configure tests and report the results" 272 # else 273 # pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results") 274 # endif 275 # elif _MSC_VER < 1500 276 # define BOOST_COMPILER_VERSION evc8 277 # elif _MSC_VER < 1600 278 # define BOOST_COMPILER_VERSION evc9 279 # elif _MSC_VER < 1700 280 # define BOOST_COMPILER_VERSION evc10 281 # elif _MSC_VER < 1800 282 # define BOOST_COMPILER_VERSION evc11 283 # else 284 # if defined(BOOST_ASSERT_CONFIG) 285 # error "Unknown EVC++ compiler version - please run the configure tests and report the results" 286 # else 287 # pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results") 288 # endif 289 # endif 290 # else 291 # if _MSC_VER < 1200 292 // Note: these are so far off, they are not really supported 293 # define BOOST_COMPILER_VERSION 5.0 294 # elif _MSC_VER < 1300 295 # define BOOST_COMPILER_VERSION 6.0 296 # elif _MSC_VER < 1310 297 # define BOOST_COMPILER_VERSION 7.0 298 # elif _MSC_VER < 1400 299 # define BOOST_COMPILER_VERSION 7.1 300 # elif _MSC_VER < 1500 301 # define BOOST_COMPILER_VERSION 8.0 302 # elif _MSC_VER < 1600 303 # define BOOST_COMPILER_VERSION 9.0 304 # elif _MSC_VER < 1700 305 # define BOOST_COMPILER_VERSION 10.0 306 # elif _MSC_VER < 1800 307 # define BOOST_COMPILER_VERSION 11.0 308 # else 309 # define BOOST_COMPILER_VERSION _MSC_VER 310 # endif 311 # endif 312 313 # define BOOST_COMPILER "Microsoft Visual C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) 314 #endif 315 316 // 317 // last known and checked version is 1700 (VC11, aka 2011): 318 #if (_MSC_VER > 1700) 319 # if defined(BOOST_ASSERT_CONFIG) 320 # error "Unknown compiler version - please run the configure tests and report the results" 321 # else 322 # pragma message("Unknown compiler version - please run the configure tests and report the results") 323 # endif 324 #endif 325