File indexing completed on 2025-01-18 09:29:45
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef BOOST_CLBL_TRTS_DETAIL_DEFAULT_BOOST_CLBL_TRTS_HPP
0010 #define BOOST_CLBL_TRTS_DETAIL_DEFAULT_BOOST_CLBL_TRTS_HPP
0011
0012 namespace boost { namespace callable_traits { namespace detail {
0013
0014 template<typename T = void>
0015 struct default_callable_traits {
0016
0017
0018
0019 static constexpr bool value = false;
0020
0021
0022
0023 using traits = default_callable_traits;
0024
0025 using error_t = error_type<T>;
0026
0027
0028 using type = error_t;
0029
0030
0031 using has_varargs = std::false_type;
0032
0033 using return_type = error_t;
0034
0035
0036
0037
0038
0039
0040
0041 using arg_types = error_t;
0042
0043
0044 using non_invoke_arg_types = error_t;
0045
0046
0047
0048
0049
0050 using function_type = error_t;
0051
0052
0053 using function_object_signature = error_t;
0054
0055
0056
0057
0058 using qualified_function_type = error_t;
0059
0060
0061
0062 using remove_varargs = error_t;
0063
0064
0065
0066 using add_varargs = error_t;
0067
0068
0069
0070 using is_noexcept = std::false_type;
0071
0072
0073 using add_noexcept = error_t;
0074
0075
0076 using remove_noexcept = error_t;
0077
0078
0079
0080 using is_transaction_safe = std::false_type;
0081
0082
0083 using add_transaction_safe = error_t;
0084
0085
0086 using remove_transaction_safe = error_t;
0087
0088
0089 using class_type = error_t;
0090
0091
0092
0093 using invoke_type = error_t;
0094
0095
0096 using remove_reference = error_t;
0097
0098
0099
0100 using add_member_lvalue_reference = error_t;
0101
0102
0103
0104 using add_member_rvalue_reference = error_t;
0105
0106
0107 using add_member_const = error_t;
0108
0109
0110 using add_member_volatile = error_t;
0111
0112
0113 using add_member_cv = error_t;
0114
0115
0116 using remove_member_const = error_t;
0117
0118
0119 using remove_member_volatile = error_t;
0120
0121
0122
0123 using remove_member_cv = error_t;
0124
0125
0126
0127 using remove_member_pointer = error_t;
0128
0129
0130
0131
0132
0133 template<typename C,
0134 typename U = T,
0135 typename K = typename std::remove_reference<U>::type,
0136 typename L = typename std::conditional<
0137 std::is_same<void, K>::value, error_t, K>::type,
0138 typename Class = typename std::conditional<
0139 std::is_class<C>::value, C, error_t>::type>
0140 using apply_member_pointer = typename std::conditional<
0141 std::is_same<L, error_t>::value || std::is_same<Class, error_t>::value,
0142 error_t, L Class::*>::type;
0143
0144
0145
0146
0147 template<typename>
0148 using apply_return = error_t;
0149
0150
0151 template<template<class...> class Container>
0152 using expand_args = error_t;
0153
0154 template<template<class...> class Container, typename... RightArgs>
0155 using expand_args_left = error_t;
0156
0157 template<template<class...> class Container, typename... LeftArgs>
0158 using expand_args_right = error_t;
0159
0160 using clear_args = error_t;
0161
0162 template<typename... NewArgs>
0163 using push_front = error_t;
0164
0165 template<typename... NewArgs>
0166 using push_back = error_t;
0167
0168 template<std::size_t ElementCount>
0169 using pop_front = error_t;
0170
0171 template<std::size_t ElementCount>
0172 using pop_back = error_t;
0173
0174 template<std::size_t Index, typename... NewArgs>
0175 using insert_args = error_t;
0176
0177 template<std::size_t Index, std::size_t Count>
0178 using remove_args = error_t;
0179
0180 template<std::size_t Index, typename... NewArgs>
0181 using replace_args = error_t;
0182
0183 static constexpr qualifier_flags cv_flags = cv_of<T>::value;
0184 static constexpr qualifier_flags ref_flags = ref_of<T>::value;
0185 static constexpr qualifier_flags q_flags = cv_flags | ref_flags;
0186
0187 using has_member_qualifiers = std::integral_constant<bool, q_flags != default_>;
0188 using is_const_member = std::integral_constant<bool, 0 < (cv_flags & const_)>;
0189 using is_volatile_member = std::integral_constant<bool, 0 < (cv_flags & volatile_)>;
0190 using is_cv_member = std::integral_constant<bool, cv_flags == (const_ | volatile_)>;
0191
0192 #ifdef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS
0193 using is_reference_member = std::false_type;
0194 using is_lvalue_reference_member = std::false_type;
0195 using is_rvalue_reference_member = std::false_type;
0196 #else
0197 using is_reference_member = std::integral_constant<bool, 0 < ref_flags>;
0198 using is_lvalue_reference_member = std::integral_constant<bool, ref_flags == lref_>;
0199 using is_rvalue_reference_member = std::integral_constant<bool, ref_flags == rref_>;
0200 #endif
0201
0202 };
0203
0204 }}}
0205
0206 #endif
0207