borland.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 244 行
HPP
244 行
// (C) Copyright John Maddock 2001 - 2003.// (C) Copyright David Abrahams 2002 - 2003.// (C) Copyright Aleksey Gurtovoy 2002.// Use, modification and distribution are subject to the// Boost Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)// See http://www.boost.org for most recent version.// Borland C++ compiler setup://// versions check:// we don't support Borland prior to version 5.4:#if __BORLANDC__ < 0x540# error "Compiler not supported or configured - please reconfigure"#endif// last known and checked version is 0x600 (Builder X preview)// or 0x593 (CodeGear C++ Builder 2007 December 2007 update):#if (__BORLANDC__ > 0x593) && (__BORLANDC__ != 0x600)//# if defined(BOOST_ASSERT_CONFIG)# error "Unknown compiler version - please run the configure tests and report the results"//# else//# pragma message( "Unknown compiler version - please run the configure tests and report the results")//# endif#elif (__BORLANDC__ == 0x600)# error "CBuilderX preview compiler is no longer supported"#endif//// Support macros to help with standard library detection#if (__BORLANDC__ < 0x560) || defined(_USE_OLD_RW_STL)# define BOOST_BCB_WITH_ROGUE_WAVE#elif __BORLANDC__ < 0x570# define BOOST_BCB_WITH_STLPORT#else# define BOOST_BCB_WITH_DINKUMWARE#endif//// Version 5.0 and below:# if __BORLANDC__ <= 0x0550// Borland C++Builder 4 and 5:# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS# if __BORLANDC__ == 0x0550// Borland C++Builder 5, command-line compiler 5.5:# define BOOST_NO_OPERATORS_IN_NAMESPACE# endif# endif// Version 5.51 and below:#if (__BORLANDC__ <= 0x551)# define BOOST_NO_CV_SPECIALIZATIONS# define BOOST_NO_CV_VOID_SPECIALIZATIONS# define BOOST_NO_DEDUCED_TYPENAME// workaround for missing WCHAR_MAX/WCHAR_MIN:#include <climits>#include <cwchar>#ifndef WCHAR_MAX# define WCHAR_MAX 0xffff#endif#ifndef WCHAR_MIN# define WCHAR_MIN 0#endif#endif// Borland C++ Builder 6 and below:#if (__BORLANDC__ <= 0x564)# define BOOST_NO_INTEGRAL_INT64_T# ifdef NDEBUG // fix broken <cstring> so that Boost.test works:# include <cstring># undef strcmp# endif // fix broken errno declaration:# include <errno.h># ifndef errno# define errno errno# endif#endif//// new bug in 5.61:#if (__BORLANDC__ >= 0x561) && (__BORLANDC__ <= 0x580) // this seems to be needed by the command line compiler, but not the IDE:# define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS#endif// Borland C++ Builder 2006 Update 2 and below:#if (__BORLANDC__ <= 0x582)# define BOOST_NO_SFINAE# define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG# define BOOST_NO_TEMPLATE_TEMPLATES# define BOOST_NO_PRIVATE_IN_AGGREGATE# ifdef _WIN32# define BOOST_NO_SWPRINTF# elif defined(linux) || defined(__linux__) || defined(__linux) // we should really be able to do without this // but the wcs* functions aren't imported into std::# define BOOST_NO_STDC_NAMESPACE // _CPPUNWIND doesn't get automatically set for some reason:# pragma defineonoption BOOST_CPPUNWIND -x# endif#endif// Borland C++ Builder 2007 December 2007 Update and below:#if (__BORLANDC__ <= 0x593) // we shouldn't really need this - but too many things choke // without it, this needs more investigation:# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS# define BOOST_NO_IS_ABSTRACT# define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS// Temporary workaround#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS#endif// Borland C++ Builder 2008 and below:#if (__BORLANDC__ <= 0x601)# define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL# define BOOST_ILLEGAL_CV_REFERENCES# define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS# define BOOST_NO_TWO_PHASE_NAME_LOOKUP# define BOOST_NO_USING_TEMPLATE# define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE#endif//// Positive Feature detection//// Borland C++ Builder 2008 and below:#if (__BORLANDC__ >= 0x599)# pragma defineonoption BOOST_CODEGEAR_0X_SUPPORT -Ax#endif#if defined( BOOST_CODEGEAR_0X_SUPPORT )# #if __BORLANDC__ >= 0x610# define BOOST_HAS_ALIGNOF# define BOOST_HAS_CHAR16_T# define BOOST_HAS_CHAR32_T# define BOOST_HAS_DECLTYPE//# define BOOST_HAS_DEFAULTED_FN//# define BOOST_HAS_DELETED_FN# define BOOST_HAS_EXPLICIT_CONVERSION_OPS//# define BOOST_HAS_NULLPTR//# define BOOST_HAS_RAW_STRING# define BOOST_HAS_REF_QUALIFIER# define BOOST_HAS_RVALUE_REFS//# define BOOST_HAS_SCOPED_ENUM# define BOOST_HAS_STATIC_ASSERT//# define BOOST_HAS_VARIADIC_TMPL# #endif //__BORLANDC__ >= 0x610#endif#if __BORLANDC__ >= 0x590# define BOOST_HAS_TR1_HASH# define BOOST_HAS_MACRO_USE_FACET#endif//// Post 0x561 we have long long and stdint.h:#if __BORLANDC__ >= 0x561# ifndef __NO_LONG_LONG# define BOOST_HAS_LONG_LONG# endif // On non-Win32 platforms let the platform config figure this out:# ifdef _WIN32# define BOOST_HAS_STDINT_H# endif#endif// Borland C++Builder 6 defaults to using STLPort. If _USE_OLD_RW_STL is// defined, then we have 0x560 or greater with the Rogue Wave implementation// which presumably has the std::DBL_MAX bug.#if defined( BOOST_BCB_WITH_ROGUE_WAVE )// <climits> is partly broken, some macros define symbols that are really in// namespace std, so you end up having to use illegal constructs like// std::DBL_MAX, as a fix we'll just include float.h and have done with:#include <float.h>#endif//// __int64://#if (__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)# define BOOST_HAS_MS_INT64#endif//// check for exception handling support://#if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS)# define BOOST_NO_EXCEPTIONS#endif//// all versions have a <dirent.h>://#ifndef __STRICT_ANSI__# define BOOST_HAS_DIRENT_H#endif//// all versions support __declspec://#ifndef __STRICT_ANSI__# define BOOST_HAS_DECLSPEC#endif//// ABI fixing headers://#if __BORLANDC__ < 0x600 // not implemented for version 6 compiler yet#ifndef BOOST_ABI_PREFIX# define BOOST_ABI_PREFIX "boost/config/abi/borland_prefix.hpp"#endif#ifndef BOOST_ABI_SUFFIX# define BOOST_ABI_SUFFIX "boost/config/abi/borland_suffix.hpp"#endif#endif//// Disable Win32 support in ANSI mode://#if __BORLANDC__ < 0x600# pragma defineonoption BOOST_DISABLE_WIN32 -A#elif defined(__STRICT_ANSI__)# define BOOST_DISABLE_WIN32#endif//// MSVC compatibility mode does some nasty things:// TODO: look up if this doesn't apply to the whole 12xx range//#if defined(_MSC_VER) && (_MSC_VER <= 1200)# define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP# define BOOST_NO_VOID_RETURNS#endif#define BOOST_COMPILER "Borland C++ version " BOOST_STRINGIZE(__BORLANDC__)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?