Ticket #3047: visualc.hpp

File visualc.hpp, 6.7 KB (added by anonymous, 13 years ago)
Line 
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#define BOOST_MSVC _MSC_VER
16
17// turn off the warnings before we #include anything
18#pragma warning( disable : 4503 ) // warning: decorated name length exceeded
19
20#if _MSC_VER < 1300 // 1200 == VC++ 6.0, 1200-1202 == eVC++4
21# pragma warning( disable : 4786 ) // ident trunc to '255' chars in debug info
22# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
23# define BOOST_NO_VOID_RETURNS
24# define BOOST_NO_EXCEPTION_STD_NAMESPACE
25
26# if BOOST_MSVC == 1202
27# define BOOST_NO_STD_TYPEINFO
28# endif
29
30 // disable min/max macro defines on vc6:
31 //
32#endif
33
34#if (_MSC_VER <= 1300) // 1300 == VC++ 7.0
35
36# if !defined(_MSC_EXTENSIONS) && !defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) // VC7 bug with /Za
37# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
38# endif
39
40# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
41# define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
42# define BOOST_NO_PRIVATE_IN_AGGREGATE
43# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
44# define BOOST_NO_INTEGRAL_INT64_T
45# define BOOST_NO_DEDUCED_TYPENAME
46# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
47
48// VC++ 6/7 has member templates but they have numerous problems including
49// cases of silent failure, so for safety we define:
50# define BOOST_NO_MEMBER_TEMPLATES
51// For VC++ experts wishing to attempt workarounds, we define:
52# define BOOST_MSVC6_MEMBER_TEMPLATES
53
54# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
55# define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
56# define BOOST_NO_CV_VOID_SPECIALIZATIONS
57# define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
58# define BOOST_NO_USING_TEMPLATE
59# define BOOST_NO_SWPRINTF
60# define BOOST_NO_TEMPLATE_TEMPLATES
61# define BOOST_NO_SFINAE
62# define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS
63# define BOOST_NO_IS_ABSTRACT
64# define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS
65// TODO: what version is meant here? Have there really been any fixes in cl 12.01 (as e.g. shipped with eVC4)?
66# if (_MSC_VER > 1200)
67# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
68# endif
69
70#endif
71
72#if _MSC_VER < 1400
73// although a conforming signature for swprint exists in VC7.1
74// it appears not to actually work:
75# define BOOST_NO_SWPRINTF
76#endif
77
78#if defined(UNDER_CE)
79// Windows CE does not have a conforming signature for swprintf
80# define BOOST_NO_SWPRINTF
81#endif
82
83#if _MSC_VER <= 1400 // 1400 == VC++ 8.0
84# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
85#endif
86
87#if _MSC_VER <= 1600 // 1600 == VC++ 10.0
88# define BOOST_NO_TWO_PHASE_NAME_LOOKUP
89#endif
90
91#if _MSC_VER == 1500 // 1500 == VC++ 9.0
92 // A bug in VC9:
93# define BOOST_NO_ADL_BARRIER
94#endif
95
96#if _MSC_VER <= 1500 || !defined(BOOST_STRICT_CONFIG) // 1500 == VC++ 9.0
97# define BOOST_NO_INITIALIZER_LISTS
98#endif
99
100#ifndef _NATIVE_WCHAR_T_DEFINED
101# define BOOST_NO_INTRINSIC_WCHAR_T
102#endif
103
104#if defined(_WIN32_WCE) || defined(UNDER_CE)
105# define BOOST_NO_THREADEX
106# define BOOST_NO_GETSYSTEMTIMEASFILETIME
107# define BOOST_NO_SWPRINTF
108#endif
109
110//
111// check for exception handling support:
112#ifndef _CPPUNWIND
113# define BOOST_NO_EXCEPTIONS
114#endif
115
116//
117// __int64 support:
118//
119#if (_MSC_VER >= 1200)
120# define BOOST_HAS_MS_INT64
121#endif
122#if (_MSC_VER >= 1310) && defined(_MSC_EXTENSIONS)
123# define BOOST_HAS_LONG_LONG
124#endif
125#if (_MSC_VER >= 1400) && !defined(_DEBUG)
126# define BOOST_HAS_NRVO
127#endif
128//
129// disable Win32 API's if compiler extentions are
130// turned off:
131//
132#if !defined(_MSC_EXTENSIONS) && !defined(BOOST_DISABLE_WIN32)
133# define BOOST_DISABLE_WIN32
134#endif
135#if !defined(_CPPRTTI) && !defined(BOOST_NO_RTTI)
136# define BOOST_NO_RTTI
137#endif
138
139//
140// all versions support __declspec:
141//
142#define BOOST_HAS_DECLSPEC
143//
144// prefix and suffix headers:
145//
146#ifndef BOOST_ABI_PREFIX
147# define BOOST_ABI_PREFIX "boost/config/abi/msvc_prefix.hpp"
148#endif
149#ifndef BOOST_ABI_SUFFIX
150# define BOOST_ABI_SUFFIX "boost/config/abi/msvc_suffix.hpp"
151#endif
152
153// TODO:
154// these things are mostly bogus. 1200 means version 12.0 of the compiler. The
155// artificial versions assigned to them only refer to the versions of some IDE
156// these compilers have been shipped with, and even that is not all of it. Some
157// were shipped with freely downloadable SDKs, others as crosscompilers in eVC.
158// IOW, you can't use these 'versions' in any sensible way. Sorry.
159# if defined(UNDER_CE)
160# if _MSC_VER < 1200
161 // Note: these are so far off, they are not really supported
162# elif _MSC_VER < 1300 // eVC++ 4 comes with 1200-1202
163# define BOOST_COMPILER_VERSION evc4.0
164# elif _MSC_VER == 1400
165# define BOOST_COMPILER_VERSION evc8
166# else
167# if defined(BOOST_ASSERT_CONFIG)
168# error "Unknown EVC++ compiler version - please run the configure tests and report the results"
169# else
170# pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results")
171# endif
172# endif
173# else
174# if _MSC_VER < 1200
175 // Note: these are so far off, they are not really supported
176# define BOOST_COMPILER_VERSION 5.0
177# elif _MSC_VER < 1300
178# define BOOST_COMPILER_VERSION 6.0
179# elif _MSC_VER == 1300
180# define BOOST_COMPILER_VERSION 7.0
181# elif _MSC_VER == 1310
182# define BOOST_COMPILER_VERSION 7.1
183# elif _MSC_VER == 1400
184# define BOOST_COMPILER_VERSION 8.0
185# elif _MSC_VER == 1500
186# define BOOST_COMPILER_VERSION 9.0
187# elif _MSC_VER == 1600
188# define BOOST_COMPILER_VERSION 10.0
189# else
190# define BOOST_COMPILER_VERSION _MSC_VER
191# endif
192# endif
193
194#define BOOST_COMPILER "Microsoft Visual C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION)
195
196//
197// versions check:
198// we don't support Visual C++ prior to version 6:
199#if _MSC_VER < 1200
200#error "Compiler not supported or configured - please reconfigure"
201#endif
202//
203// last known and checked version is 1500 (VC9):
204#if (_MSC_VER > 1600)
205# if defined(BOOST_ASSERT_CONFIG)
206# error "Unknown compiler version - please run the configure tests and report the results"
207# else
208# pragma message("Unknown compiler version - please run the configure tests and report the results")
209# endif
210#endif