9 #ifndef BOOST_CLBL_TRTS_DETAIL_SET_FUNCTION_QUALIFIERS_HPP
10 #define BOOST_CLBL_TRTS_DETAIL_SET_FUNCTION_QUALIFIERS_HPP
14 #define BOOST_CLBL_TRTS_SET_FUNCTION_QUALIFIERS(QUAL) \
15 template<typename Return, typename... Args> \
16 struct set_function_qualifiers_t < \
17 flag_map<int QUAL>::value, false, false, Return, Args...> { \
18 using type = Return(Args...) QUAL; \
21 template<typename Return, typename... Args> \
22 struct set_function_qualifiers_t < \
23 flag_map<int QUAL>::value, true, false, Return, Args...> { \
24 using type = Return(Args...) QUAL \
25 BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER; \
28 template<typename Return, typename... Args> \
29 struct set_function_qualifiers_t < \
30 flag_map<int QUAL>::value, false, true, Return, Args...> { \
31 using type = Return(Args...) QUAL \
32 BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER; \
35 template<typename Return, typename... Args> \
36 struct set_function_qualifiers_t < \
37 flag_map<int QUAL>::value, true, true, Return, Args...> { \
38 using type = Return(Args...) QUAL \
39 BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER \
40 BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER; \
43 template<typename Return, typename... Args> \
44 struct set_varargs_function_qualifiers_t < \
45 flag_map<int QUAL>::value, false, false, Return, Args...> { \
46 using type = Return(Args..., ...) QUAL; \
49 template<typename Return, typename... Args> \
50 struct set_varargs_function_qualifiers_t < \
51 flag_map<int QUAL>::value, true, false, Return, Args...> { \
52 using type = Return(Args..., ...) QUAL \
53 BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER; \
56 template<typename Return, typename... Args> \
57 struct set_varargs_function_qualifiers_t < \
58 flag_map<int QUAL>::value, false, true, Return, Args...> { \
59 using type = Return(Args..., ...) QUAL \
60 BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER; \
63 template<typename Return, typename... Args> \
64 struct set_varargs_function_qualifiers_t < \
65 flag_map<int QUAL>::value, true, true, Return, Args...> { \
66 using type = Return(Args..., ...) QUAL \
67 BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER \
68 BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER; \
72 namespace boost {
namespace callable_traits {
namespace detail {
75 bool IsNoexcept,
typename Return,
typename... Args>
77 using type = Return(Args...);
81 bool IsNoexcept,
typename Return,
typename... Args>
83 using type = Return(Args..., ...);
86 #ifndef BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
92 #ifndef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS
106 template<
qualifier_flags Flags,
bool IsTransactionSafe,
bool IsNoexcept,
112 template<
qualifier_flags Flags,
bool IsTransactionSafe,
bool IsNoexcept,
116 IsNoexcept, Ts...>::type;
typename set_varargs_function_qualifiers_t< Flags, IsTransactionSafe, IsNoexcept, Ts... >::type set_varargs_function_qualifiers
std::uint32_t qualifier_flags
BOOST_CLBL_TRTS_SET_FUNCTION_QUALIFIERS(const)
typename set_function_qualifiers_t< Flags, IsTransactionSafe, IsNoexcept, Ts... >::type set_function_qualifiers