2016-10-23 18:16:55 +03:00
|
|
|
#ifndef BOOST_MP11_DETAIL_CONFIG_HPP_INCLUDED
|
|
|
|
|
#define BOOST_MP11_DETAIL_CONFIG_HPP_INCLUDED
|
|
|
|
|
|
2018-08-29 20:03:59 +03:00
|
|
|
// Copyright 2016, 2018 Peter Dimov.
|
2016-10-23 18:16:55 +03:00
|
|
|
//
|
|
|
|
|
// 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
|
|
|
|
|
|
2018-08-29 20:03:59 +03:00
|
|
|
// BOOST_MP11_WORKAROUND
|
2016-10-23 18:16:55 +03:00
|
|
|
|
2018-08-29 20:03:59 +03:00
|
|
|
#if defined( BOOST_STRICT_CONFIG ) || defined( BOOST_MP11_NO_WORKAROUNDS )
|
|
|
|
|
|
|
|
|
|
# define BOOST_MP11_WORKAROUND( symbol, test ) 0
|
|
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
|
|
# define BOOST_MP11_WORKAROUND( symbol, test ) ((symbol) != 0 && ((symbol) test))
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
#define BOOST_MP11_CUDA 0
|
|
|
|
|
#define BOOST_MP11_CLANG 0
|
|
|
|
|
#define BOOST_MP11_INTEL 0
|
|
|
|
|
#define BOOST_MP11_GCC 0
|
|
|
|
|
#define BOOST_MP11_MSVC 0
|
|
|
|
|
|
|
|
|
|
#define BOOST_MP11_CONSTEXPR constexpr
|
|
|
|
|
|
|
|
|
|
#if defined( __CUDACC__ )
|
|
|
|
|
|
|
|
|
|
// nvcc
|
|
|
|
|
|
|
|
|
|
# undef BOOST_MP11_CUDA
|
|
|
|
|
# define BOOST_MP11_CUDA (__CUDACC_VER_MAJOR__ * 1000000 + __CUDACC_VER_MINOR__ * 10000 + __CUDACC_VER_BUILD__)
|
|
|
|
|
|
|
|
|
|
// CUDA (8.0) has no constexpr support in msvc mode:
|
|
|
|
|
# if defined(_MSC_VER) && (BOOST_MP11_CUDA < 9000000)
|
2016-10-23 18:16:55 +03:00
|
|
|
|
|
|
|
|
# define BOOST_MP11_NO_CONSTEXPR
|
|
|
|
|
|
2018-08-29 20:03:59 +03:00
|
|
|
# undef BOOST_MP11_CONSTEXPR
|
|
|
|
|
# define BOOST_MP11_CONSTEXPR
|
|
|
|
|
|
|
|
|
|
# endif
|
|
|
|
|
|
|
|
|
|
#elif defined(__clang__)
|
|
|
|
|
|
|
|
|
|
// clang++
|
|
|
|
|
|
|
|
|
|
# undef BOOST_MP11_CLANG
|
|
|
|
|
# define BOOST_MP11_CLANG (__clang_major__ * 100 + __clang_minor__)
|
|
|
|
|
|
|
|
|
|
# if defined(__has_cpp_attribute)
|
|
|
|
|
# if __has_cpp_attribute(fallthrough) && __cplusplus >= 201406L // Clang 3.9+ in c++1z mode
|
|
|
|
|
# define BOOST_MP11_HAS_FOLD_EXPRESSIONS
|
|
|
|
|
# endif
|
|
|
|
|
# endif
|
2016-10-23 18:16:55 +03:00
|
|
|
|
2018-08-29 20:03:59 +03:00
|
|
|
#elif defined(__INTEL_COMPILER)
|
|
|
|
|
|
|
|
|
|
// Intel C++
|
|
|
|
|
|
|
|
|
|
# undef BOOST_MP11_INTEL
|
|
|
|
|
# define BOOST_MP11_INTEL __INTEL_COMPILER
|
|
|
|
|
|
|
|
|
|
#elif defined(__GNUC__)
|
|
|
|
|
|
|
|
|
|
// g++
|
|
|
|
|
|
|
|
|
|
# undef BOOST_MP11_GCC
|
|
|
|
|
# define BOOST_MP11_GCC (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
|
|
|
|
|
|
|
|
|
|
#elif defined(_MSC_VER)
|
|
|
|
|
|
|
|
|
|
// MS Visual C++
|
|
|
|
|
|
|
|
|
|
# undef BOOST_MP11_MSVC
|
|
|
|
|
# define BOOST_MP11_MSVC _MSC_VER
|
|
|
|
|
|
|
|
|
|
# if BOOST_MP11_WORKAROUND( BOOST_MP11_MSVC, < 1920 )
|
2016-10-23 18:16:55 +03:00
|
|
|
# define BOOST_MP11_NO_CONSTEXPR
|
2018-08-29 20:03:59 +03:00
|
|
|
# endif
|
2016-10-23 18:16:55 +03:00
|
|
|
|
2018-08-29 20:03:59 +03:00
|
|
|
#if _MSC_FULL_VER < 190024210 // 2015u3
|
|
|
|
|
# undef BOOST_MP11_CONSTEXPR
|
|
|
|
|
# define BOOST_MP11_CONSTEXPR
|
2016-10-23 18:16:55 +03:00
|
|
|
#endif
|
|
|
|
|
|
2018-08-29 20:03:59 +03:00
|
|
|
#endif
|
2017-05-24 06:16:17 +03:00
|
|
|
|
2018-08-29 20:03:59 +03:00
|
|
|
// BOOST_MP11_HAS_CXX14_CONSTEXPR
|
2017-05-24 06:16:17 +03:00
|
|
|
|
2018-08-29 20:03:59 +03:00
|
|
|
#if !defined(BOOST_MP11_NO_CONSTEXPR) && defined(__cpp_constexpr) && __cpp_constexpr >= 201304
|
|
|
|
|
# define BOOST_MP11_HAS_CXX14_CONSTEXPR
|
|
|
|
|
#endif
|
2017-03-18 01:05:54 +02:00
|
|
|
|
2018-08-29 20:03:59 +03:00
|
|
|
// BOOST_MP11_HAS_FOLD_EXPRESSIONS
|
2017-03-18 01:05:54 +02:00
|
|
|
|
2018-08-29 20:03:59 +03:00
|
|
|
#if !defined(BOOST_MP11_HAS_FOLD_EXPRESSIONS) && defined(__cpp_fold_expressions) && __cpp_fold_expressions >= 201603
|
|
|
|
|
# define BOOST_MP11_HAS_FOLD_EXPRESSIONS
|
2017-03-18 01:05:54 +02:00
|
|
|
#endif
|
|
|
|
|
|
2018-08-29 20:03:59 +03:00
|
|
|
// BOOST_MP11_HAS_TYPE_PACK_ELEMENT
|
|
|
|
|
|
2017-03-25 20:32:40 +02:00
|
|
|
#if defined(__has_builtin)
|
|
|
|
|
# if __has_builtin(__type_pack_element)
|
|
|
|
|
# define BOOST_MP11_HAS_TYPE_PACK_ELEMENT
|
|
|
|
|
# endif
|
|
|
|
|
#endif
|
|
|
|
|
|
2016-10-23 18:16:55 +03:00
|
|
|
#endif // #ifndef BOOST_MP11_DETAIL_CONFIG_HPP_INCLUDED
|