| // (C) Copyright Douglas Gregor 2010 |
| // |
| // 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. |
| |
| // Clang compiler setup. |
| |
| #if !__has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS) |
| # define BOOST_NO_EXCEPTIONS |
| #endif |
| |
| #if !__has_feature(cxx_rtti) && !defined(BOOST_NO_RTTI) |
| # define BOOST_NO_RTTI |
| #endif |
| |
| #if !__has_feature(cxx_rtti) && !defined(BOOST_NO_TYPEID) |
| # define BOOST_NO_TYPEID |
| #endif |
| |
| #if defined(__int64) && !defined(__GNUC__) |
| # define BOOST_HAS_MS_INT64 |
| #endif |
| |
| #define BOOST_HAS_NRVO |
| |
| // Clang supports "long long" in all compilation modes. |
| #define BOOST_HAS_LONG_LONG |
| |
| // |
| // Dynamic shared object (DSO) and dynamic-link library (DLL) support |
| // |
| #if !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32) |
| # define BOOST_SYMBOL_EXPORT __attribute__((__visibility__("default"))) |
| # define BOOST_SYMBOL_IMPORT |
| # define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default"))) |
| #endif |
| |
| // |
| // The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through |
| // between switch labels. |
| // |
| #if __cplusplus >= 201103L && defined(__has_warning) |
| # if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough") |
| # define BOOST_FALLTHROUGH [[clang::fallthrough]] |
| # endif |
| #endif |
| |
| #if !__has_feature(cxx_auto_type) |
| # define BOOST_NO_CXX11_AUTO_DECLARATIONS |
| # define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS |
| #endif |
| |
| #if !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L) |
| # define BOOST_NO_CXX11_CHAR16_T |
| # define BOOST_NO_CXX11_CHAR32_T |
| #endif |
| |
| #if !__has_feature(cxx_constexpr) |
| # define BOOST_NO_CXX11_CONSTEXPR |
| #endif |
| |
| #if !__has_feature(cxx_decltype) |
| # define BOOST_NO_CXX11_DECLTYPE |
| #endif |
| |
| #if !__has_feature(cxx_decltype_incomplete_return_types) |
| # define BOOST_NO_CXX11_DECLTYPE_N3276 |
| #endif |
| |
| #if !__has_feature(cxx_defaulted_functions) |
| # define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS |
| #endif |
| |
| #if !__has_feature(cxx_deleted_functions) |
| # define BOOST_NO_CXX11_DELETED_FUNCTIONS |
| #endif |
| |
| #if !__has_feature(cxx_explicit_conversions) |
| # define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS |
| #endif |
| |
| #if !__has_feature(cxx_default_function_template_args) |
| # define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS |
| #endif |
| |
| #if !__has_feature(cxx_generalized_initializers) |
| # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST |
| #endif |
| |
| #if !__has_feature(cxx_lambdas) |
| # define BOOST_NO_CXX11_LAMBDAS |
| #endif |
| |
| #if !__has_feature(cxx_local_type_template_args) |
| # define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS |
| #endif |
| |
| #if !__has_feature(cxx_noexcept) |
| # define BOOST_NO_CXX11_NOEXCEPT |
| #endif |
| |
| #if !__has_feature(cxx_nullptr) |
| # define BOOST_NO_CXX11_NULLPTR |
| #endif |
| |
| #if !__has_feature(cxx_range_for) |
| # define BOOST_NO_CXX11_RANGE_BASED_FOR |
| #endif |
| |
| #if !__has_feature(cxx_raw_string_literals) |
| # define BOOST_NO_CXX11_RAW_LITERALS |
| #endif |
| |
| #if !__has_feature(cxx_generalized_initializers) |
| # define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX |
| #endif |
| |
| #if !__has_feature(cxx_rvalue_references) |
| # define BOOST_NO_CXX11_RVALUE_REFERENCES |
| #endif |
| |
| #if !__has_feature(cxx_strong_enums) |
| # define BOOST_NO_CXX11_SCOPED_ENUMS |
| #endif |
| |
| #if !__has_feature(cxx_static_assert) |
| # define BOOST_NO_CXX11_STATIC_ASSERT |
| #endif |
| |
| #if !__has_feature(cxx_alias_templates) |
| # define BOOST_NO_CXX11_TEMPLATE_ALIASES |
| #endif |
| |
| #if !__has_feature(cxx_unicode_literals) |
| # define BOOST_NO_CXX11_UNICODE_LITERALS |
| #endif |
| |
| #if !__has_feature(cxx_variadic_templates) |
| # define BOOST_NO_CXX11_VARIADIC_TEMPLATES |
| #endif |
| |
| #if !__has_feature(cxx_user_literals) |
| # define BOOST_NO_CXX11_USER_DEFINED_LITERALS |
| #endif |
| |
| // Clang always supports variadic macros |
| // Clang always supports extern templates |
| |
| #ifndef BOOST_COMPILER |
| # define BOOST_COMPILER "Clang version " __clang_version__ |
| #endif |
| |
| // Macro used to identify the Clang compiler. |
| #define BOOST_CLANG 1 |
| |