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) \
15template<typename Return, typename... Args> \
16struct set_function_qualifiers_t < \
17 flag_map<int QUAL>::value, false, false, Return, Args...> { \
18 using type = Return(Args...) QUAL; \
21template<typename Return, typename... Args> \
22struct 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; \
28template<typename Return, typename... Args> \
29struct 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; \
35template<typename Return, typename... Args> \
36struct 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; \
43template<typename Return, typename... Args> \
44struct set_varargs_function_qualifiers_t < \
45 flag_map<int QUAL>::value, false, false, Return, Args...> { \
46 using type = Return(Args..., ...) QUAL; \
49template<typename Return, typename... Args> \
50struct 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; \
56template<typename Return, typename... Args> \
57struct 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; \
63template<typename Return, typename... Args> \
64struct 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; \
72namespace 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
typename set_function_qualifiers_t< Flags, IsTransactionSafe, IsNoexcept, Ts... >::type set_function_qualifiers
#define BOOST_CLBL_TRTS_SET_FUNCTION_QUALIFIERS(QUAL)