1#ifndef BOOST_MP11_DETAIL_CONFIG_HPP_INCLUDED
2#define BOOST_MP11_DETAIL_CONFIG_HPP_INCLUDED
3
4// Copyright 2016, 2018, 2019 Peter Dimov.
5//
6// Distributed under the Boost Software License, Version 1.0.
7//
8// See accompanying file LICENSE_1_0.txt or copy at
9// http://www.boost.org/LICENSE_1_0.txt
10
11// BOOST_MP11_WORKAROUND
12
13#if defined( BOOST_STRICT_CONFIG ) || defined( BOOST_MP11_NO_WORKAROUNDS )
14
15# define BOOST_MP11_WORKAROUND( symbol, test ) 0
16
17#else
18
19# define BOOST_MP11_WORKAROUND( symbol, test ) ((symbol) != 0 && ((symbol) test))
20
21#endif
22
23//
24
25#define BOOST_MP11_CUDA 0
26#define BOOST_MP11_CLANG 0
27#define BOOST_MP11_INTEL 0
28#define BOOST_MP11_GCC 0
29#define BOOST_MP11_MSVC 0
30
31#define BOOST_MP11_CONSTEXPR constexpr
32
33#if defined( __CUDACC__ )
34
35// nvcc
36
37# undef BOOST_MP11_CUDA
38# define BOOST_MP11_CUDA (__CUDACC_VER_MAJOR__ * 1000000 + __CUDACC_VER_MINOR__ * 10000 + __CUDACC_VER_BUILD__)
39
40// CUDA (8.0) has no constexpr support in msvc mode:
41# if defined(_MSC_VER) && (BOOST_MP11_CUDA < 9000000)
42
43# define BOOST_MP11_NO_CONSTEXPR
44
45# undef BOOST_MP11_CONSTEXPR
46# define BOOST_MP11_CONSTEXPR
47
48# endif
49
50#elif defined(__clang__)
51
52// Clang
53
54# undef BOOST_MP11_CLANG
55# define BOOST_MP11_CLANG (__clang_major__ * 100 + __clang_minor__)
56
57# if defined(__has_cpp_attribute)
58# if __has_cpp_attribute(fallthrough) && __cplusplus >= 201406L // Clang 3.9+ in c++1z mode
59# define BOOST_MP11_HAS_FOLD_EXPRESSIONS
60# endif
61# endif
62
63#if BOOST_MP11_CLANG < 400 && __cplusplus >= 201402L \
64 && defined( __GLIBCXX__ ) && !__has_include(<shared_mutex>)
65
66// Clang pre-4 in C++14 mode, libstdc++ pre-4.9, ::gets is not defined,
67// but Clang tries to import it into std
68
69 extern "C" char *gets (char *__s);
70#endif
71
72#elif defined(__INTEL_COMPILER)
73
74// Intel C++
75
76# undef BOOST_MP11_INTEL
77# define BOOST_MP11_INTEL __INTEL_COMPILER
78
79#elif defined(__GNUC__)
80
81// g++
82
83# undef BOOST_MP11_GCC
84# define BOOST_MP11_GCC (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
85
86#elif defined(_MSC_VER)
87
88// MS Visual C++
89
90# undef BOOST_MP11_MSVC
91# define BOOST_MP11_MSVC _MSC_VER
92
93# if BOOST_MP11_WORKAROUND( BOOST_MP11_MSVC, < 1920 )
94# define BOOST_MP11_NO_CONSTEXPR
95# endif
96
97#if _MSC_FULL_VER < 190024210 // 2015u3
98# undef BOOST_MP11_CONSTEXPR
99# define BOOST_MP11_CONSTEXPR
100#endif
101
102#endif
103
104// BOOST_MP11_HAS_CXX14_CONSTEXPR
105
106#if !defined(BOOST_MP11_NO_CONSTEXPR) && defined(__cpp_constexpr) && __cpp_constexpr >= 201304
107# define BOOST_MP11_HAS_CXX14_CONSTEXPR
108#endif
109
110// BOOST_MP11_HAS_FOLD_EXPRESSIONS
111
112#if !defined(BOOST_MP11_HAS_FOLD_EXPRESSIONS) && defined(__cpp_fold_expressions) && __cpp_fold_expressions >= 201603
113# define BOOST_MP11_HAS_FOLD_EXPRESSIONS
114#endif
115
116// BOOST_MP11_HAS_TYPE_PACK_ELEMENT
117
118#if defined(__has_builtin)
119# if __has_builtin(__type_pack_element)
120# define BOOST_MP11_HAS_TYPE_PACK_ELEMENT
121# endif
122#endif
123
124// BOOST_MP11_DEPRECATED(msg)
125
126#if BOOST_MP11_WORKAROUND( BOOST_MP11_CLANG, < 304 )
127# define BOOST_MP11_DEPRECATED(msg)
128#elif defined(__GNUC__) || defined(__clang__)
129# define BOOST_MP11_DEPRECATED(msg) __attribute__((deprecated(msg)))
130#elif defined(_MSC_VER) && _MSC_VER >= 1900
131# define BOOST_MP11_DEPRECATED(msg) [[deprecated(msg)]]
132#else
133# define BOOST_MP11_DEPRECATED(msg)
134#endif
135
136#endif // #ifndef BOOST_MP11_DETAIL_CONFIG_HPP_INCLUDED
137

source code of include/boost/mp11/detail/config.hpp