]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/config/compiler/borland.hpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
661d6c8d407fe16b3b5349e8b432c9838963b835
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / config / compiler / borland.hpp
1 //  (C) Copyright John Maddock 2001 - 2003.\r
2 //  (C) Copyright David Abrahams 2002 - 2003.\r
3 //  (C) Copyright Aleksey Gurtovoy 2002.\r
4 //  Use, modification and distribution are subject to the\r
5 //  Boost Software License, Version 1.0. (See accompanying file\r
6 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
7 \r
8 //  See http://www.boost.org for most recent version.\r
9 \r
10 //  Borland C++ compiler setup:\r
11 \r
12 //\r
13 // versions check:\r
14 // we don't support Borland prior to version 5.4:\r
15 #if __BORLANDC__ < 0x540\r
16 #  error "Compiler not supported or configured - please reconfigure"\r
17 #endif\r
18 \r
19 // last known compiler version:\r
20 #if (__BORLANDC__ > 0x613)\r
21 //#  if defined(BOOST_ASSERT_CONFIG)\r
22 #     error "Unknown compiler version - please run the configure tests and report the results"\r
23 //#  else\r
24 //#     pragma message( "Unknown compiler version - please run the configure tests and report the results")\r
25 //#  endif\r
26 #elif (__BORLANDC__ == 0x600)\r
27 #  error "CBuilderX preview compiler is no longer supported"\r
28 #endif\r
29 \r
30 //\r
31 // Support macros to help with standard library detection\r
32 #if (__BORLANDC__ < 0x560) || defined(_USE_OLD_RW_STL)\r
33 #  define BOOST_BCB_WITH_ROGUE_WAVE\r
34 #elif __BORLANDC__ < 0x570\r
35 #  define BOOST_BCB_WITH_STLPORT\r
36 #else\r
37 #  define BOOST_BCB_WITH_DINKUMWARE\r
38 #endif\r
39 \r
40 //\r
41 // Version 5.0 and below:\r
42 #   if __BORLANDC__ <= 0x0550\r
43 // Borland C++Builder 4 and 5:\r
44 #     define BOOST_NO_MEMBER_TEMPLATE_FRIENDS\r
45 #     if __BORLANDC__ == 0x0550\r
46 // Borland C++Builder 5, command-line compiler 5.5:\r
47 #       define BOOST_NO_OPERATORS_IN_NAMESPACE\r
48 #     endif\r
49 #   endif\r
50 \r
51 // Version 5.51 and below:\r
52 #if (__BORLANDC__ <= 0x551)\r
53 #  define BOOST_NO_CV_SPECIALIZATIONS\r
54 #  define BOOST_NO_CV_VOID_SPECIALIZATIONS\r
55 #  define BOOST_NO_DEDUCED_TYPENAME\r
56 // workaround for missing WCHAR_MAX/WCHAR_MIN:\r
57 #include <climits>\r
58 #include <cwchar>\r
59 #ifndef WCHAR_MAX\r
60 #  define WCHAR_MAX 0xffff\r
61 #endif\r
62 #ifndef WCHAR_MIN\r
63 #  define WCHAR_MIN 0\r
64 #endif\r
65 #endif\r
66 \r
67 // Borland C++ Builder 6 and below:\r
68 #if (__BORLANDC__ <= 0x564)\r
69 \r
70 #  ifdef NDEBUG\r
71       // fix broken <cstring> so that Boost.test works:\r
72 #     include <cstring>\r
73 #     undef strcmp\r
74 #  endif\r
75    // fix broken errno declaration:\r
76 #  include <errno.h>\r
77 #  ifndef errno\r
78 #     define errno errno\r
79 #  endif\r
80 \r
81 #endif\r
82 \r
83 //\r
84 // new bug in 5.61:\r
85 #if (__BORLANDC__ >= 0x561) && (__BORLANDC__ <= 0x580)\r
86    // this seems to be needed by the command line compiler, but not the IDE:\r
87 #  define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS\r
88 #endif\r
89 \r
90 // Borland C++ Builder 2006 Update 2 and below:\r
91 #if (__BORLANDC__ <= 0x582)\r
92 #  define BOOST_NO_SFINAE\r
93 #  define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG\r
94 #  define BOOST_NO_TEMPLATE_TEMPLATES\r
95 \r
96 #  define BOOST_NO_PRIVATE_IN_AGGREGATE\r
97 \r
98 #  ifdef _WIN32\r
99 #     define BOOST_NO_SWPRINTF\r
100 #  elif defined(linux) || defined(__linux__) || defined(__linux)\r
101       // we should really be able to do without this\r
102       // but the wcs* functions aren't imported into std::\r
103 #     define BOOST_NO_STDC_NAMESPACE\r
104       // _CPPUNWIND doesn't get automatically set for some reason:\r
105 #     pragma defineonoption BOOST_CPPUNWIND -x\r
106 #  endif\r
107 #endif\r
108 \r
109 #if (__BORLANDC__ <= 0x613)  // Beman has asked Alisdair for more info\r
110    // we shouldn't really need this - but too many things choke\r
111    // without it, this needs more investigation:\r
112 #  define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS\r
113 #  define BOOST_NO_IS_ABSTRACT\r
114 #  define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS\r
115 #  define BOOST_NO_USING_TEMPLATE\r
116 #  define BOOST_SP_NO_SP_CONVERTIBLE\r
117 \r
118 // Temporary workaround\r
119 #define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS\r
120 #endif\r
121 \r
122 // Borland C++ Builder 2008 and below:\r
123 #  define BOOST_NO_INTEGRAL_INT64_T\r
124 #  define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL\r
125 #  define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS\r
126 #  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS\r
127 #  define BOOST_NO_TWO_PHASE_NAME_LOOKUP\r
128 #  define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE\r
129 #  define BOOST_NO_NESTED_FRIENDSHIP\r
130 #  define BOOST_NO_TYPENAME_WITH_CTOR\r
131 #if (__BORLANDC__ < 0x600)\r
132 #  define BOOST_ILLEGAL_CV_REFERENCES\r
133 #endif\r
134 \r
135 //\r
136 //  Positive Feature detection\r
137 //\r
138 // Borland C++ Builder 2008 and below:\r
139 #if (__BORLANDC__ >= 0x599)\r
140 #  pragma defineonoption BOOST_CODEGEAR_0X_SUPPORT -Ax\r
141 #endif\r
142 //\r
143 // C++0x Macros:\r
144 //\r
145 #if !defined( BOOST_CODEGEAR_0X_SUPPORT ) || (__BORLANDC__ < 0x610)\r
146 #  define BOOST_NO_CHAR16_T\r
147 #  define BOOST_NO_CHAR32_T\r
148 #  define BOOST_NO_DECLTYPE\r
149 #  define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS\r
150 #  define BOOST_NO_EXTERN_TEMPLATE\r
151 #  define BOOST_NO_RVALUE_REFERENCES \r
152 #  define BOOST_NO_SCOPED_ENUMS\r
153 #  define BOOST_NO_STATIC_ASSERT\r
154 #else\r
155 #  define BOOST_HAS_ALIGNOF\r
156 #  define BOOST_HAS_CHAR16_T\r
157 #  define BOOST_HAS_CHAR32_T\r
158 #  define BOOST_HAS_DECLTYPE\r
159 #  define BOOST_HAS_EXPLICIT_CONVERSION_OPS\r
160 #  define BOOST_HAS_REF_QUALIFIER\r
161 #  define BOOST_HAS_RVALUE_REFS\r
162 #  define BOOST_HAS_STATIC_ASSERT\r
163 #endif\r
164 \r
165 #define BOOST_NO_AUTO_DECLARATIONS\r
166 #define BOOST_NO_AUTO_MULTIDECLARATIONS\r
167 #define BOOST_NO_CONCEPTS\r
168 #define BOOST_NO_CONSTEXPR\r
169 #define BOOST_NO_DEFAULTED_FUNCTIONS\r
170 #define BOOST_NO_DELETED_FUNCTIONS\r
171 #define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS\r
172 #define BOOST_NO_INITIALIZER_LISTS\r
173 #define BOOST_NO_LAMBDAS\r
174 #define BOOST_NO_NULLPTR\r
175 #define BOOST_NO_RAW_LITERALS\r
176 #define BOOST_NO_RVALUE_REFERENCES\r
177 #define BOOST_NO_SCOPED_ENUMS\r
178 #define BOOST_NO_SFINAE_EXPR\r
179 #define BOOST_NO_TEMPLATE_ALIASES\r
180 #define BOOST_NO_UNICODE_LITERALS    // UTF-8 still not supported\r
181 #define BOOST_NO_VARIADIC_TEMPLATES\r
182 \r
183 #if __BORLANDC__ >= 0x590\r
184 #  define BOOST_HAS_TR1_HASH\r
185 \r
186 #  define BOOST_HAS_MACRO_USE_FACET\r
187 #endif\r
188 \r
189 //\r
190 // Post 0x561 we have long long and stdint.h:\r
191 #if __BORLANDC__ >= 0x561\r
192 #  ifndef __NO_LONG_LONG\r
193 #     define BOOST_HAS_LONG_LONG\r
194 #  else\r
195 #     define BOOST_NO_LONG_LONG\r
196 #  endif\r
197    // On non-Win32 platforms let the platform config figure this out:\r
198 #  ifdef _WIN32\r
199 #      define BOOST_HAS_STDINT_H\r
200 #  endif\r
201 #endif\r
202 \r
203 // Borland C++Builder 6 defaults to using STLPort.  If _USE_OLD_RW_STL is\r
204 // defined, then we have 0x560 or greater with the Rogue Wave implementation\r
205 // which presumably has the std::DBL_MAX bug.\r
206 #if defined( BOOST_BCB_WITH_ROGUE_WAVE )\r
207 // <climits> is partly broken, some macros define symbols that are really in\r
208 // namespace std, so you end up having to use illegal constructs like\r
209 // std::DBL_MAX, as a fix we'll just include float.h and have done with:\r
210 #include <float.h>\r
211 #endif\r
212 //\r
213 // __int64:\r
214 //\r
215 #if (__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)\r
216 #  define BOOST_HAS_MS_INT64\r
217 #endif\r
218 //\r
219 // check for exception handling support:\r
220 //\r
221 #if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS)\r
222 #  define BOOST_NO_EXCEPTIONS\r
223 #endif\r
224 //\r
225 // all versions have a <dirent.h>:\r
226 //\r
227 #ifndef __STRICT_ANSI__\r
228 #  define BOOST_HAS_DIRENT_H\r
229 #endif\r
230 //\r
231 // all versions support __declspec:\r
232 //\r
233 #ifndef __STRICT_ANSI__\r
234 #  define BOOST_HAS_DECLSPEC\r
235 #endif\r
236 //\r
237 // ABI fixing headers:\r
238 //\r
239 #if __BORLANDC__ != 0x600 // not implemented for version 6 compiler yet\r
240 #ifndef BOOST_ABI_PREFIX\r
241 #  define BOOST_ABI_PREFIX "boost/config/abi/borland_prefix.hpp"\r
242 #endif\r
243 #ifndef BOOST_ABI_SUFFIX\r
244 #  define BOOST_ABI_SUFFIX "boost/config/abi/borland_suffix.hpp"\r
245 #endif\r
246 #endif\r
247 //\r
248 // Disable Win32 support in ANSI mode:\r
249 //\r
250 #if __BORLANDC__ < 0x600\r
251 #  pragma defineonoption BOOST_DISABLE_WIN32 -A\r
252 #elif defined(__STRICT_ANSI__)\r
253 #  define BOOST_DISABLE_WIN32\r
254 #endif\r
255 //\r
256 // MSVC compatibility mode does some nasty things:\r
257 // TODO: look up if this doesn't apply to the whole 12xx range\r
258 //\r
259 #if defined(_MSC_VER) && (_MSC_VER <= 1200)\r
260 #  define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP\r
261 #  define BOOST_NO_VOID_RETURNS\r
262 #endif\r
263 \r
264 #define BOOST_COMPILER "Borland C++ version " BOOST_STRINGIZE(__BORLANDC__)\r
265 \r
266 \r
267 \r