mirror of
https://github.com/catchorg/Catch2.git
synced 2024-12-28 05:33:30 +01:00
43470b2606
- as it was already there for VS2010 on
174 lines
4.3 KiB
C++
174 lines
4.3 KiB
C++
/*
|
|
* 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_OR_GREATER : Is C++11 supported?
|
|
|
|
// CATCH_CONFIG_SFINAE : is basic (C++03) SFINAE supported?
|
|
// CATCH_CONFIG_VARIADIC_MACROS : are variadic macros supported?
|
|
|
|
|
|
// A lot of this code is based on Boost (1.53)
|
|
|
|
#ifdef __clang__
|
|
|
|
# if __has_feature(cxx_nullptr)
|
|
# define CATCH_CONFIG_CPP11_NULLPTR
|
|
# endif
|
|
|
|
# if __has_feature(cxx_noexcept)
|
|
# define CATCH_CONFIG_CPP11_NOEXCEPT
|
|
# endif
|
|
|
|
#endif // __clang__
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Borland
|
|
#ifdef __BORLANDC__
|
|
|
|
#if (__BORLANDC__ > 0x582 )
|
|
//#define CATCH_CONFIG_SFINAE // Not confirmed
|
|
#endif
|
|
|
|
#endif // __BORLANDC__
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// EDG
|
|
#ifdef __EDG_VERSION__
|
|
|
|
#if (__EDG_VERSION__ > 238 )
|
|
//#define CATCH_CONFIG_SFINAE // Not confirmed
|
|
#endif
|
|
|
|
#endif // __EDG_VERSION__
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Digital Mars
|
|
#ifdef __DMC__
|
|
|
|
#if (__DMC__ > 0x840 )
|
|
//#define CATCH_CONFIG_SFINAE // Not confirmed
|
|
#endif
|
|
|
|
#endif // __DMC__
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// GCC
|
|
#ifdef __GNUC__
|
|
|
|
#if __GNUC__ < 3
|
|
|
|
#if (__GNUC_MINOR__ >= 96 )
|
|
//#define CATCH_CONFIG_SFINAE
|
|
#endif
|
|
|
|
#elif __GNUC__ >= 3
|
|
|
|
// #define CATCH_CONFIG_SFINAE // Taking this out completely for now
|
|
|
|
#endif // __GNUC__ < 3
|
|
|
|
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6 && defined(__GXX_EXPERIMENTAL_CXX0X__) )
|
|
|
|
#define CATCH_CONFIG_CPP11_NULLPTR
|
|
#endif
|
|
|
|
|
|
#endif // __GNUC__
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Visual C++
|
|
#ifdef _MSC_VER
|
|
|
|
#if (_MSC_VER >= 1310 ) // (VC++ 7.0+)
|
|
//#define CATCH_CONFIG_SFINAE // Not confirmed
|
|
#endif
|
|
|
|
#if (_MSC_VER >= 1600)
|
|
#define CATCH_CONFIG_CPP11_NULLPTR
|
|
#endif
|
|
|
|
#if (_MSC_VER >= 1900 ) // (VC++ 13 (VS2015))
|
|
#define CATCH_CONFIG_CPP11_NOEXCEPT
|
|
#define CATCH_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 )
|
|
|
|
#ifndef CATCH_CONFIG_NO_VARIADIC_MACROS
|
|
#define CATCH_CONFIG_VARIADIC_MACROS
|
|
#endif
|
|
|
|
#endif
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// C++ language feature support
|
|
|
|
// catch all support for C++11
|
|
#if (__cplusplus >= 201103L)
|
|
|
|
# define CATCH_CPP11_OR_GREATER
|
|
|
|
# ifndef CATCH_CONFIG_CPP11_NULLPTR
|
|
# define CATCH_CONFIG_CPP11_NULLPTR
|
|
# endif
|
|
|
|
# ifndef CATCH_CONFIG_CPP11_NOEXCEPT
|
|
# define CATCH_CONFIG_CPP11_NOEXCEPT
|
|
# endif
|
|
|
|
# ifndef CATCH_CONFIG_CPP11_GENERATED_METHODS
|
|
# define CATCH_CONFIG_CPP11_GENERATED_METHODS
|
|
# endif
|
|
|
|
# ifndef CATCH_CONFIG_CPP11_IS_ENUM
|
|
# define CATCH_CONFIG_CPP11_IS_ENUM
|
|
# endif
|
|
|
|
# ifndef CATCH_CONFIG_CPP11_TUPLE
|
|
# define CATCH_CONFIG_CPP11_TUPLE
|
|
# endif
|
|
|
|
# ifndef CATCH_CONFIG_SFINAE
|
|
//# define CATCH_CONFIG_SFINAE // Don't use, for now
|
|
# endif
|
|
|
|
# ifndef CATCH_CONFIG_VARIADIC_MACROS
|
|
# define CATCH_CONFIG_VARIADIC_MACROS
|
|
# endif
|
|
|
|
#endif // __cplusplus >= 201103L
|
|
|
|
// 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
|
|
|
|
#endif // TWOBLUECUBES_CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED
|
|
|