| /* |
| * Created by Phil on 15/04/2013. |
| * Copyright 2013 Two Blue Cubes Ltd. All rights reserved. |
| * |
| * Distributed under 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) |
| */ |
| #ifndef TWOBLUECUBES_CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED |
| #define TWOBLUECUBES_CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED |
| |
| // Detect a number of compiler features - mostly C++11/14 conformance - by compiler |
| // The following features are defined: |
| // |
| // CATCH_CONFIG_CPP11_NULLPTR : is nullptr supported? |
| // CATCH_CONFIG_CPP11_NOEXCEPT : is noexcept supported? |
| // CATCH_CONFIG_CPP11_GENERATED_METHODS : The delete and default keywords for compiler generated methods |
| // CATCH_CONFIG_CPP11_IS_ENUM : std::is_enum is supported? |
| // CATCH_CONFIG_CPP11_TUPLE : std::tuple is supported |
| // CATCH_CONFIG_CPP11_LONG_LONG : is long long supported? |
| |
| // CATCH_CONFIG_CPP11_OR_GREATER : Is C++11 supported? |
| |
| // CATCH_CONFIG_VARIADIC_MACROS : are variadic macros supported? |
| |
| |
| // In general each macro has a _NO_<feature name> form |
| // (e.g. CATCH_CONFIG_CPP11_NO_NULLPTR) which disables the feature. |
| // Many features, at point of detection, define an _INTERNAL_ macro, so they |
| // can be combined, en-mass, with the _NO_ forms later. |
| |
| // All the C++11 features can be disabled with CATCH_CONFIG_NO_CPP11 |
| |
| #ifdef __clang__ |
| |
| # if __has_feature(cxx_nullptr) |
| # define CATCH_INTERNAL_CONFIG_CPP11_NULLPTR |
| # endif |
| |
| # if __has_feature(cxx_noexcept) |
| # define CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT |
| # endif |
| |
| #endif // __clang__ |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Borland |
| #ifdef __BORLANDC__ |
| |
| |
| #endif // __BORLANDC__ |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // EDG |
| #ifdef __EDG_VERSION__ |
| |
| |
| #endif // __EDG_VERSION__ |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Digital Mars |
| #ifdef __DMC__ |
| |
| |
| #endif // __DMC__ |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // GCC |
| #ifdef __GNUC__ |
| |
| #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6 && defined(__GXX_EXPERIMENTAL_CXX0X__) ) |
| # define CATCH_INTERNAL_CONFIG_CPP11_NULLPTR |
| #endif |
| |
| |
| #endif // __GNUC__ |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Visual C++ |
| #ifdef _MSC_VER |
| |
| #if (_MSC_VER >= 1600) |
| # define CATCH_INTERNAL_CONFIG_CPP11_NULLPTR |
| #endif |
| |
| #if (_MSC_VER >= 1900 ) // (VC++ 13 (VS2015)) |
| #define CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT |
| #define CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS |
| #endif |
| |
| #endif // _MSC_VER |
| |
| // Use variadic macros if the compiler supports them |
| #if ( defined _MSC_VER && _MSC_VER > 1400 && !defined __EDGE__) || \ |
| ( defined __WAVE__ && __WAVE_HAS_VARIADICS ) || \ |
| ( defined __GNUC__ && __GNUC__ >= 3 ) || \ |
| ( !defined __cplusplus && __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L ) |
| |
| #define CATCH_INTERNAL_CONFIG_VARIADIC_MACROS |
| |
| #endif |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // C++ language feature support |
| |
| // catch all support for C++11 |
| #if (__cplusplus >= 201103L) |
| |
| # define CATCH_CPP11_OR_GREATER |
| |
| # if !defined(CATCH_INTERNAL_CONFIG_CPP11_NULLPTR) |
| # define CATCH_INTERNAL_CONFIG_CPP11_NULLPTR |
| # endif |
| |
| # ifndef CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT |
| # define CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT |
| # endif |
| |
| # ifndef CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS |
| # define CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS |
| # endif |
| |
| # ifndef CATCH_INTERNAL_CONFIG_CPP11_IS_ENUM |
| # define CATCH_INTERNAL_CONFIG_CPP11_IS_ENUM |
| # endif |
| |
| # ifndef CATCH_INTERNAL_CONFIG_CPP11_TUPLE |
| # define CATCH_INTERNAL_CONFIG_CPP11_TUPLE |
| # endif |
| |
| # ifndef CATCH_INTERNAL_CONFIG_VARIADIC_MACROS |
| # define CATCH_INTERNAL_CONFIG_VARIADIC_MACROS |
| # endif |
| |
| # if !defined(CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG) |
| # define CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG |
| # endif |
| |
| #endif // __cplusplus >= 201103L |
| |
| // Now set the actual defines based on the above + anything the user has configured |
| #if defined(CATCH_INTERNAL_CONFIG_CPP11_NULLPTR) && !defined(CATCH_CONFIG_CPP11_NO_NULLPTR) && !defined(CATCH_CONFIG_CPP11_NULLPTR) && !defined(CATCH_CONFIG_NO_CPP11) |
| # define CATCH_CONFIG_CPP11_NULLPTR |
| #endif |
| #if defined(CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT) && !defined(CATCH_CONFIG_CPP11_NO_NOEXCEPT) && !defined(CATCH_CONFIG_CPP11_NOEXCEPT) && !defined(CATCH_CONFIG_NO_CPP11) |
| # define CATCH_CONFIG_CPP11_NOEXCEPT |
| #endif |
| #if defined(CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS) && !defined(CATCH_CONFIG_CPP11_NO_GENERATED_METHODS) && !defined(CATCH_CONFIG_CPP11_GENERATED_METHODS) && !defined(CATCH_CONFIG_NO_CPP11) |
| # define CATCH_CONFIG_CPP11_GENERATED_METHODS |
| #endif |
| #if defined(CATCH_INTERNAL_CONFIG_CPP11_IS_ENUM) && !defined(CATCH_CONFIG_CPP11_NO_IS_ENUM) && !defined(CATCH_CONFIG_CPP11_IS_ENUM) && !defined(CATCH_CONFIG_NO_CPP11) |
| # define CATCH_CONFIG_CPP11_IS_ENUM |
| #endif |
| #if defined(CATCH_INTERNAL_CONFIG_CPP11_TUPLE) && !defined(CATCH_CONFIG_CPP11_NO_TUPLE) && !defined(CATCH_CONFIG_CPP11_TUPLE) && !defined(CATCH_CONFIG_NO_CPP11) |
| # define CATCH_CONFIG_CPP11_TUPLE |
| #endif |
| #if defined(CATCH_INTERNAL_CONFIG_VARIADIC_MACROS) && !defined(CATCH_CONFIG_NO_VARIADIC_MACROS) && !defined(CATCH_CONFIG_VARIADIC_MACROS) |
| # define CATCH_CONFIG_VARIADIC_MACROS |
| #endif |
| #if defined(CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_NO_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_LONG_LONG) |
| # define CATCH_CONFIG_CPP11_LONG_LONG |
| #endif |
| |
| |
| // noexcept support: |
| #if defined(CATCH_CONFIG_CPP11_NOEXCEPT) && !defined(CATCH_NOEXCEPT) |
| # define CATCH_NOEXCEPT noexcept |
| # define CATCH_NOEXCEPT_IS(x) noexcept(x) |
| #else |
| # define CATCH_NOEXCEPT throw() |
| # define CATCH_NOEXCEPT_IS(x) |
| #endif |
| |
| // nullptr support |
| #ifdef CATCH_CONFIG_CPP11_NULLPTR |
| # define CATCH_NULL nullptr |
| #else |
| # define CATCH_NULL NULL |
| #endif |
| |
| #endif // TWOBLUECUBES_CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED |
| |