• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 @Copyright Barrett Adair 2016-2017
3 
4 Distributed under the Boost Software License, Version 1.0.
5 (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
6 
7 */
8 
9 #ifndef BOOST_CLBL_TRTS_DETAIL_CONFIG_HPP
10 #define BOOST_CLBL_TRTS_DETAIL_CONFIG_HPP
11 
12 #include <type_traits>
13 #include <tuple>
14 #include <utility>
15 #include <cstdint>
16 
17 #define BOOST_CLBL_TRTS_EMPTY_
18 #define BOOST_CLBL_TRTS_EMPTY BOOST_CLBL_TRTS_EMPTY_
19 
20 #ifdef __cpp_transactional_memory
21 # define BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE
22 #endif
23 
24 #ifdef __cpp_inline_variables
25 # define BOOST_CLBL_TRAITS_INLINE_VAR inline
26 #else
27 # define BOOST_CLBL_TRAITS_INLINE_VAR
28 #endif
29 
30 #ifdef __cpp_noexcept_function_type
31 # define BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
32 #endif
33 
34 #ifdef BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE
35 #  define BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER transaction_safe
36 #else
37 #  define BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER
38 #endif
39 
40 #ifndef __clang__
41 #  if defined(__GNUC__)
42 #    define BOOST_CLBL_TRTS_GCC
43 #    if __GNUC__ >= 6
44 #        define BOOST_CLBL_TRTS_GCC_AT_LEAST_6_0_0
45 #    endif
46 #    if __GNUC__ < 5
47 #        define BOOST_CLBL_TRTS_GCC_OLDER_THAN_5_0_0
48 #    endif
49 #    if __GNUC__ >= 5
50 #      define BOOST_CLBL_TRTS_GCC_AT_LEAST_4_9_2
51 #    elif __GNUC__ == 4 && __GNUC_MINOR__ == 9 && __GNUC_PATCHLEVEL__ >= 2
52 #      define BOOST_CLBL_TRTS_GCC_AT_LEAST_4_9_2
53 #    else
54 #      define BOOST_CLBL_TRTS_GCC_OLDER_THAN_4_9_2
55 #    endif //#if __GNUC__ >= 5
56 #  endif //#if defined __GNUC__
57 #endif // #ifndef __clang__
58 
59 #ifdef _MSC_VER
60 #  ifdef __clang__
61 #    define BOOST_CLBL_TRTS_CLANG_C2
62 #  else
63 #    define BOOST_CLBL_TRTS_MSVC
64 #  endif // #ifdef __clang__
65 #endif // #ifdef _MSC_VER
66 
67 #define BOOST_CLBL_TRTS_IX_SEQ(...) ::std::index_sequence< __VA_ARGS__ >
68 #define BOOST_CLBL_TRTS_MAKE_IX_SEQ(...) ::std::make_index_sequence< __VA_ARGS__ >
69 #define BOOST_CLBL_TRTS_DISJUNCTION(...) ::std::disjunction< __VA_ARGS__ >
70 
71 #ifndef __cpp_variable_templates
72 #  define BOOST_CLBL_TRTS_DISABLE_VARIABLE_TEMPLATES
73 #endif
74 
75 #ifndef __cpp_lib_logical_traits
76 #  include <boost/callable_traits/detail/polyfills/disjunction.hpp>
77 #endif //__cpp_lib_logical_traits
78 
79 #ifndef __cpp_lib_integer_sequence
80 #  include <boost/callable_traits/detail/polyfills/make_index_sequence.hpp>
81 #endif // __cpp_lib_integer_sequence
82 
83 #if defined(BOOST_CLBL_TRTS_MSVC) && !defined(BOOST_DISABLE_WIN32)
84 #  define BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC __cdecl
85 #  define BOOST_CLBL_TRTS_PMF_VARGARGS_CDECL_DEFAULT
86 #else
87 #  define BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
88 #endif // #if defined(BOOST_CLBL_TRTS_MSVC) && !defined(BOOST_DISABLE_WIN32))
89 
90 #if (defined(BOOST_CLBL_TRTS_GCC) && !defined(BOOST_CLBL_TRTS_GCC_AT_LEAST_4_9_2)) || defined(__INTEL_COMPILER)
91 #  define BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS
92 #  define BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
93 #endif // #if defined BOOST_CLBL_TRTS_GCC && !defined(BOOST_CLBL_TRTS_GCC_AT_LEAST_4_9_2)
94 
95 #ifdef BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
96 #  define BOOST_CLBL_TRTS_ABOMINABLE_CONST BOOST_CLBL_TRTS_EMPTY
97 #  define BOOST_CLBL_TRTS_ABOMINABLE_VOLATILE BOOST_CLBL_TRTS_EMPTY
98 #else
99 #  define BOOST_CLBL_TRTS_ABOMINABLE_CONST const
100 #  define BOOST_CLBL_TRTS_ABOMINABLE_VOLATILE volatile
101 #endif // #ifdef BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
102 
103 #ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
104 #  define BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER noexcept
105 #else
106 #  define BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER BOOST_CLBL_TRTS_EMPTY
107 #endif // #ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
108 
109 #endif // #ifndef BOOST_CLBL_TRTS_DETAIL_CONFIG_HPP
110