Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 09:44:40

0001 //  (C) Copyright John Maddock 2001 - 2003.
0002 //  (C) Copyright David Abrahams 2002 - 2003.
0003 //  (C) Copyright Aleksey Gurtovoy 2002.
0004 //  Use, modification and distribution are subject to the
0005 //  Boost Software License, Version 1.0. (See accompanying file
0006 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0007 
0008 //  See http://www.boost.org for most recent version.
0009 
0010 //  Borland C++ compiler setup:
0011 
0012 //
0013 // versions check:
0014 // we don't support Borland prior to version 5.4:
0015 #if __BORLANDC__ < 0x540
0016 #  error "Compiler not supported or configured - please reconfigure"
0017 #endif
0018 
0019 // last known compiler version:
0020 #if (__BORLANDC__ > 0x613)
0021 //#  if defined(BOOST_ASSERT_CONFIG)
0022 #     error "boost: Unknown compiler version - please run the configure tests and report the results"
0023 //#  else
0024 //#     pragma message( "boost: Unknown compiler version - please run the configure tests and report the results")
0025 //#  endif
0026 #elif (__BORLANDC__ == 0x600)
0027 #  error "CBuilderX preview compiler is no longer supported"
0028 #endif
0029 
0030 //
0031 // Support macros to help with standard library detection
0032 #if (__BORLANDC__ < 0x560) || defined(_USE_OLD_RW_STL)
0033 #  define BOOST_BCB_WITH_ROGUE_WAVE
0034 #elif __BORLANDC__ < 0x570
0035 #  define BOOST_BCB_WITH_STLPORT
0036 #else
0037 #  define BOOST_BCB_WITH_DINKUMWARE
0038 #endif
0039 
0040 //
0041 // Version 5.0 and below:
0042 #   if __BORLANDC__ <= 0x0550
0043 // Borland C++Builder 4 and 5:
0044 #     define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
0045 #     if __BORLANDC__ == 0x0550
0046 // Borland C++Builder 5, command-line compiler 5.5:
0047 #       define BOOST_NO_OPERATORS_IN_NAMESPACE
0048 #     endif
0049 // Variadic macros do not exist for C++ Builder versions 5 and below
0050 #define BOOST_NO_CXX11_VARIADIC_MACROS
0051 #   endif
0052 
0053 // Version 5.51 and below:
0054 #if (__BORLANDC__ <= 0x551)
0055 #  define BOOST_NO_CV_SPECIALIZATIONS
0056 #  define BOOST_NO_CV_VOID_SPECIALIZATIONS
0057 #  define BOOST_NO_DEDUCED_TYPENAME
0058 // workaround for missing WCHAR_MAX/WCHAR_MIN:
0059 #ifdef __cplusplus
0060 #include <climits>
0061 #include <cwchar>
0062 #else
0063 #include <limits.h>
0064 #include <wchar.h>
0065 #endif // __cplusplus
0066 #ifndef WCHAR_MAX
0067 #  define WCHAR_MAX 0xffff
0068 #endif
0069 #ifndef WCHAR_MIN
0070 #  define WCHAR_MIN 0
0071 #endif
0072 #endif
0073 
0074 // Borland C++ Builder 6 and below:
0075 #if (__BORLANDC__ <= 0x564)
0076 
0077 #  if defined(NDEBUG) && defined(__cplusplus)
0078       // fix broken <cstring> so that Boost.test works:
0079 #     include <cstring>
0080 #     undef strcmp
0081 #  endif
0082    // fix broken errno declaration:
0083 #  include <errno.h>
0084 #  ifndef errno
0085 #     define errno errno
0086 #  endif
0087 
0088 #endif
0089 
0090 //
0091 // new bug in 5.61:
0092 #if (__BORLANDC__ >= 0x561) && (__BORLANDC__ <= 0x580)
0093    // this seems to be needed by the command line compiler, but not the IDE:
0094 #  define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
0095 #endif
0096 
0097 // Borland C++ Builder 2006 Update 2 and below:
0098 #if (__BORLANDC__ <= 0x582)
0099 #  define BOOST_NO_SFINAE
0100 #  define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
0101 #  define BOOST_NO_TEMPLATE_TEMPLATES
0102 
0103 #  define BOOST_NO_PRIVATE_IN_AGGREGATE
0104 
0105 #  ifdef _WIN32
0106 #     define BOOST_NO_SWPRINTF
0107 #  elif defined(linux) || defined(__linux__) || defined(__linux)
0108       // we should really be able to do without this
0109       // but the wcs* functions aren't imported into std::
0110 #     define BOOST_NO_STDC_NAMESPACE
0111       // _CPPUNWIND doesn't get automatically set for some reason:
0112 #     pragma defineonoption BOOST_CPPUNWIND -x
0113 #  endif
0114 #endif
0115 
0116 #if (__BORLANDC__ <= 0x613)  // Beman has asked Alisdair for more info
0117    // we shouldn't really need this - but too many things choke
0118    // without it, this needs more investigation:
0119 #  define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
0120 #  define BOOST_NO_IS_ABSTRACT
0121 #  define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS
0122 #  define BOOST_NO_USING_TEMPLATE
0123 #  define BOOST_SP_NO_SP_CONVERTIBLE
0124 
0125 // Temporary workaround
0126 #define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
0127 #endif
0128 
0129 // Borland C++ Builder 2008 and below:
0130 #  define BOOST_NO_INTEGRAL_INT64_T
0131 #  define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
0132 #  define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
0133 #  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
0134 #  define BOOST_NO_TWO_PHASE_NAME_LOOKUP
0135 #  define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
0136 #  define BOOST_NO_NESTED_FRIENDSHIP
0137 #  define BOOST_NO_TYPENAME_WITH_CTOR
0138 #if (__BORLANDC__ < 0x600)
0139 #  define BOOST_ILLEGAL_CV_REFERENCES
0140 #endif
0141 
0142 //
0143 //  Positive Feature detection
0144 //
0145 // Borland C++ Builder 2008 and below:
0146 #if (__BORLANDC__ >= 0x599)
0147 #  pragma defineonoption BOOST_CODEGEAR_0X_SUPPORT -Ax
0148 #endif
0149 //
0150 // C++0x Macros:
0151 //
0152 #if !defined( BOOST_CODEGEAR_0X_SUPPORT ) || (__BORLANDC__ < 0x610)
0153 #  define BOOST_NO_CXX11_CHAR16_T
0154 #  define BOOST_NO_CXX11_CHAR32_T
0155 #  define BOOST_NO_CXX11_DECLTYPE
0156 #  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
0157 #  define BOOST_NO_CXX11_EXTERN_TEMPLATE
0158 #  define BOOST_NO_CXX11_RVALUE_REFERENCES
0159 #  define BOOST_NO_CXX11_SCOPED_ENUMS
0160 #  define BOOST_NO_CXX11_STATIC_ASSERT
0161 #else
0162 #  define BOOST_HAS_ALIGNOF
0163 #  define BOOST_HAS_CHAR16_T
0164 #  define BOOST_HAS_CHAR32_T
0165 #  define BOOST_HAS_DECLTYPE
0166 #  define BOOST_HAS_EXPLICIT_CONVERSION_OPS
0167 #  define BOOST_HAS_REF_QUALIFIER
0168 #  define BOOST_HAS_RVALUE_REFS
0169 #  define BOOST_HAS_STATIC_ASSERT
0170 #endif
0171 
0172 #define BOOST_NO_CXX11_AUTO_DECLARATIONS
0173 #define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
0174 #define BOOST_NO_CXX11_CONSTEXPR
0175 #define BOOST_NO_CXX11_DECLTYPE_N3276
0176 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
0177 #define BOOST_NO_CXX11_DEFAULTED_MOVES
0178 #define BOOST_NO_CXX11_DELETED_FUNCTIONS
0179 #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
0180 #define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
0181 #define BOOST_NO_CXX11_LAMBDAS
0182 #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
0183 #define BOOST_NO_CXX11_NULLPTR
0184 #define BOOST_NO_CXX11_RANGE_BASED_FOR
0185 #define BOOST_NO_CXX11_RAW_LITERALS
0186 #define BOOST_NO_CXX11_RVALUE_REFERENCES
0187 #define BOOST_NO_CXX11_SCOPED_ENUMS
0188 #define BOOST_NO_SFINAE_EXPR
0189 #define BOOST_NO_CXX11_SFINAE_EXPR
0190 #define BOOST_NO_CXX11_TEMPLATE_ALIASES
0191 #define BOOST_NO_CXX11_UNICODE_LITERALS    // UTF-8 still not supported
0192 #define BOOST_NO_CXX11_VARIADIC_TEMPLATES
0193 #define BOOST_NO_CXX11_NOEXCEPT
0194 #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
0195 #define BOOST_NO_CXX11_USER_DEFINED_LITERALS
0196 #define BOOST_NO_CXX11_ALIGNAS
0197 #define BOOST_NO_CXX11_ALIGNOF
0198 #define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
0199 #define BOOST_NO_CXX11_INLINE_NAMESPACES
0200 #define BOOST_NO_CXX11_REF_QUALIFIERS
0201 #define BOOST_NO_CXX11_FINAL
0202 #define BOOST_NO_CXX11_OVERRIDE
0203 #define BOOST_NO_CXX11_THREAD_LOCAL
0204 #define BOOST_NO_CXX11_UNRESTRICTED_UNION
0205 
0206 // C++ 14:
0207 #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
0208 #  define BOOST_NO_CXX14_AGGREGATE_NSDMI
0209 #endif
0210 #if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)
0211 #  define BOOST_NO_CXX14_BINARY_LITERALS
0212 #endif
0213 #if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
0214 #  define BOOST_NO_CXX14_CONSTEXPR
0215 #endif
0216 #if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)
0217 #  define BOOST_NO_CXX14_DECLTYPE_AUTO
0218 #endif
0219 #if (__cplusplus < 201304) // There's no SD6 check for this....
0220 #  define BOOST_NO_CXX14_DIGIT_SEPARATORS
0221 #endif
0222 #if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)
0223 #  define BOOST_NO_CXX14_GENERIC_LAMBDAS
0224 #endif
0225 #if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)
0226 #  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
0227 #endif
0228 #if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)
0229 #  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
0230 #endif
0231 #if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
0232 #  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
0233 #endif
0234 
0235 // C++17
0236 #if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606)
0237 #  define BOOST_NO_CXX17_STRUCTURED_BINDINGS
0238 #endif
0239 #if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606)
0240 #  define BOOST_NO_CXX17_INLINE_VARIABLES
0241 #endif
0242 #if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603)
0243 #  define BOOST_NO_CXX17_FOLD_EXPRESSIONS
0244 #endif
0245 #if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606)
0246 #  define BOOST_NO_CXX17_IF_CONSTEXPR
0247 #endif
0248 #if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606)
0249 #  define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS
0250 #endif
0251 
0252 #if __BORLANDC__ >= 0x590
0253 #  define BOOST_HAS_TR1_HASH
0254 
0255 #  define BOOST_HAS_MACRO_USE_FACET
0256 #endif
0257 
0258 //
0259 // Post 0x561 we have long long and stdint.h:
0260 #if __BORLANDC__ >= 0x561
0261 #  ifndef __NO_LONG_LONG
0262 #     define BOOST_HAS_LONG_LONG
0263 #  else
0264 #     define BOOST_NO_LONG_LONG
0265 #  endif
0266    // On non-Win32 platforms let the platform config figure this out:
0267 #  ifdef _WIN32
0268 #      define BOOST_HAS_STDINT_H
0269 #  endif
0270 #endif
0271 
0272 // Borland C++Builder 6 defaults to using STLPort.  If _USE_OLD_RW_STL is
0273 // defined, then we have 0x560 or greater with the Rogue Wave implementation
0274 // which presumably has the std::DBL_MAX bug.
0275 #if defined( BOOST_BCB_WITH_ROGUE_WAVE )
0276 // <climits> is partly broken, some macros define symbols that are really in
0277 // namespace std, so you end up having to use illegal constructs like
0278 // std::DBL_MAX, as a fix we'll just include float.h and have done with:
0279 #include <float.h>
0280 #endif
0281 //
0282 // __int64:
0283 //
0284 #if (__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)
0285 #  define BOOST_HAS_MS_INT64
0286 #endif
0287 //
0288 // check for exception handling support:
0289 //
0290 #if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)
0291 #  define BOOST_NO_EXCEPTIONS
0292 #endif
0293 //
0294 // all versions have a <dirent.h>:
0295 //
0296 #ifndef __STRICT_ANSI__
0297 #  define BOOST_HAS_DIRENT_H
0298 #endif
0299 //
0300 // all versions support __declspec:
0301 //
0302 #if defined(__STRICT_ANSI__)
0303 // config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined
0304 #  define BOOST_SYMBOL_EXPORT
0305 #endif
0306 //
0307 // ABI fixing headers:
0308 //
0309 #if __BORLANDC__ != 0x600 // not implemented for version 6 compiler yet
0310 #ifndef BOOST_ABI_PREFIX
0311 #  define BOOST_ABI_PREFIX "boost/config/abi/borland_prefix.hpp"
0312 #endif
0313 #ifndef BOOST_ABI_SUFFIX
0314 #  define BOOST_ABI_SUFFIX "boost/config/abi/borland_suffix.hpp"
0315 #endif
0316 #endif
0317 //
0318 // Disable Win32 support in ANSI mode:
0319 //
0320 #if __BORLANDC__ < 0x600
0321 #  pragma defineonoption BOOST_DISABLE_WIN32 -A
0322 #elif defined(__STRICT_ANSI__)
0323 #  define BOOST_DISABLE_WIN32
0324 #endif
0325 //
0326 // MSVC compatibility mode does some nasty things:
0327 // TODO: look up if this doesn't apply to the whole 12xx range
0328 //
0329 #if defined(_MSC_VER) && (_MSC_VER <= 1200)
0330 #  define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
0331 #  define BOOST_NO_VOID_RETURNS
0332 #endif
0333 
0334 // Borland did not implement value-initialization completely, as I reported
0335 // in 2007, Borland Report 51854, "Value-initialization: POD struct should be
0336 // zero-initialized", http://qc.embarcadero.com/wc/qcmain.aspx?d=51854
0337 // See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues
0338 // (Niels Dekker, LKEB, April 2010)
0339 #define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
0340 
0341 #define BOOST_BORLANDC __BORLANDC__
0342 #define BOOST_COMPILER "Classic Borland C++ version " BOOST_STRINGIZE(__BORLANDC__)