Ugly, not-to-be-pushed sucking in of all of Boost to get windows to work.
[dyninst.git] / external / boost / config / compiler / visualc.hpp
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    // disable min/max macro defines on vc6:
26    //
27 #endif
28
29 #if (_MSC_VER <= 1300)  // 1300 == VC++ 7.0
30
31 #  if !defined(_MSC_EXTENSIONS) && !defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS)      // VC7 bug with /Za
32 #    define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
33 #  endif
34
35 #  define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
36 #  define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
37 #  define BOOST_NO_PRIVATE_IN_AGGREGATE
38 #  define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
39 #  define BOOST_NO_INTEGRAL_INT64_T
40 #  define BOOST_NO_DEDUCED_TYPENAME
41 #  define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
42
43 //    VC++ 6/7 has member templates but they have numerous problems including
44 //    cases of silent failure, so for safety we define:
45 #  define BOOST_NO_MEMBER_TEMPLATES
46 //    For VC++ experts wishing to attempt workarounds, we define:
47 #  define BOOST_MSVC6_MEMBER_TEMPLATES
48
49 #  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
50 #  define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
51 #  define BOOST_NO_CV_VOID_SPECIALIZATIONS
52 #  define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
53 #  define BOOST_NO_USING_TEMPLATE
54 #  define BOOST_NO_SWPRINTF
55 #  define BOOST_NO_TEMPLATE_TEMPLATES
56 #  define BOOST_NO_SFINAE
57 #  define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS
58 #  define BOOST_NO_IS_ABSTRACT
59 // TODO: what version is meant here? Have there really been any fixes in cl 12.01 (as e.g. shipped with eVC4)?
60 #  if (_MSC_VER > 1200)
61 #     define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
62 #  endif
63
64 #endif
65
66 #if _MSC_VER < 1310 // 1310 == VC++ 7.1
67 #  define BOOST_NO_SWPRINTF
68 #endif
69
70 #if _MSC_VER <= 1400  // 1400 == VC++ 8.0
71 #  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
72 #endif
73
74 #ifndef _NATIVE_WCHAR_T_DEFINED
75 #  define BOOST_NO_INTRINSIC_WCHAR_T
76 #endif
77
78 #ifdef _WIN32_WCE
79 #  define BOOST_NO_THREADEX
80 #  define BOOST_NO_GETSYSTEMTIMEASFILETIME
81 #endif
82
83 //   
84 // check for exception handling support:   
85 #ifndef _CPPUNWIND   
86 #  define BOOST_NO_EXCEPTIONS   
87 #endif 
88
89 //
90 // __int64 support:
91 //
92 #if (_MSC_VER >= 1200)
93 #   define BOOST_HAS_MS_INT64
94 #endif
95 #if (_MSC_VER >= 1310) && defined(_MSC_EXTENSIONS)
96 #   define BOOST_HAS_LONG_LONG
97 #endif
98 //
99 // disable Win32 API's if compiler extentions are
100 // turned off:
101 //
102 #ifndef _MSC_EXTENSIONS
103 #  define BOOST_DISABLE_WIN32
104 #endif
105
106 //
107 // all versions support __declspec:
108 //
109 #define BOOST_HAS_DECLSPEC
110 //
111 // prefix and suffix headers:
112 //
113 #ifndef BOOST_ABI_PREFIX
114 #  define BOOST_ABI_PREFIX "boost/config/abi/msvc_prefix.hpp"
115 #endif
116 #ifndef BOOST_ABI_SUFFIX
117 #  define BOOST_ABI_SUFFIX "boost/config/abi/msvc_suffix.hpp"
118 #endif
119
120 // TODO:
121 // these things are mostly bogus. 1200 means version 12.0 of the compiler. The 
122 // artificial versions assigned to them only refer to the versions of some IDE
123 // these compilers have been shipped with, and even that is not all of it. Some
124 // were shipped with freely downloadable SDKs, others as crosscompilers in eVC.
125 // IOW, you can't use these 'versions' in any sensible way. Sorry.
126 # if defined(UNDER_CE)
127 #   if _MSC_VER < 1200
128       // Note: these are so far off, they are not really supported
129 #   elif _MSC_VER < 1300 // eVC++ 4 comes with 1200-1202
130 #     define BOOST_COMPILER_VERSION evc4.0
131 #     error unknown CE compiler
132 #   else
133 #     error unknown CE compiler
134 #   endif
135 # else
136 #   if _MSC_VER < 1200
137       // Note: these are so far off, they are not really supported
138 #     define BOOST_COMPILER_VERSION 5.0
139 #   elif _MSC_VER < 1300
140 #       define BOOST_COMPILER_VERSION 6.0
141 #   elif _MSC_VER == 1300
142 #     define BOOST_COMPILER_VERSION 7.0
143 #   elif _MSC_VER == 1310
144 #     define BOOST_COMPILER_VERSION 7.1
145 #   elif _MSC_VER == 1400
146 #     define BOOST_COMPILER_VERSION 8.0
147 #   else
148 #     define BOOST_COMPILER_VERSION _MSC_VER
149 #   endif
150 # endif
151
152 #define BOOST_COMPILER "Microsoft Visual C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION)
153
154 //
155 // versions check:
156 // we don't support Visual C++ prior to version 6:
157 #if _MSC_VER < 1200
158 #error "Compiler not supported or configured - please reconfigure"
159 #endif
160 //
161 // last known and checked version is 1400 (VC8):
162 #if (_MSC_VER > 1400)
163 #  if defined(BOOST_ASSERT_CONFIG)
164 #     error "Unknown compiler version - please run the configure tests and report the results"
165 #  else
166 #     pragma message("Unknown compiler version - please run the configure tests and report the results")
167 #  endif
168 #endif