11 #ifndef ASIO_TRAITS_SET_VALUE_MEMBER_HPP 12 #define ASIO_TRAITS_SET_VALUE_MEMBER_HPP 14 #if defined(_MSC_VER) && (_MSC_VER >= 1200) 16 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) 18 #include "asio/detail/config.hpp" 19 #include "asio/detail/type_traits.hpp" 20 #include "asio/detail/variadic_templates.hpp" 22 #if defined(ASIO_HAS_DECLTYPE) \ 23 && defined(ASIO_HAS_NOEXCEPT) \ 24 && defined(ASIO_HAS_WORKING_EXPRESSION_SFINAE) 25 # define ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT 1 26 #endif // defined(ASIO_HAS_DECLTYPE) 30 #include "asio/detail/push_options.hpp" 35 template <
typename T,
typename Vs,
typename =
void>
38 template <
typename T,
typename Vs,
typename =
void>
46 ASIO_STATIC_CONSTEXPR(
bool, is_valid =
false);
47 ASIO_STATIC_CONSTEXPR(
bool, is_noexcept =
false);
50 #if defined(ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT) 52 template <
typename T,
typename Vs,
typename =
void>
57 #if defined(ASIO_HAS_VARIADIC_TEMPLATES) 59 template <
typename T,
typename... Vs>
62 decltype(declval<T>().set_value(declval<Vs>()...))
65 ASIO_STATIC_CONSTEXPR(
bool, is_valid =
true);
67 using result_type = decltype(
68 declval<T>().set_value(declval<Vs>()...));
70 ASIO_STATIC_CONSTEXPR(
bool, is_noexcept = noexcept(
71 declval<T>().set_value(declval<Vs>()...)));
74 #else // defined(ASIO_HAS_VARIADIC_TEMPLATES) 79 decltype(declval<T>().set_value())
82 ASIO_STATIC_CONSTEXPR(
bool, is_valid =
true);
84 using result_type = decltype(declval<T>().set_value());
86 ASIO_STATIC_CONSTEXPR(
bool,
87 is_noexcept = noexcept(declval<T>().set_value()));
90 #define ASIO_PRIVATE_SET_VALUE_MEMBER_TRAIT_DEF(n) \ 91 template <typename T, ASIO_VARIADIC_TPARAMS(n)> \ 92 struct set_value_member_trait<T, void(ASIO_VARIADIC_TARGS(n)), \ 94 decltype(declval<T>().set_value(ASIO_VARIADIC_DECLVAL(n))) \ 97 ASIO_STATIC_CONSTEXPR(bool, is_valid = true); \ 99 using result_type = decltype( \ 100 declval<T>().set_value(ASIO_VARIADIC_DECLVAL(n))); \ 102 ASIO_STATIC_CONSTEXPR(bool, is_noexcept = noexcept( \ 103 declval<T>().set_value(ASIO_VARIADIC_DECLVAL(n)))); \ 106 ASIO_VARIADIC_GENERATE(ASIO_PRIVATE_SET_VALUE_MEMBER_TRAIT_DEF)
107 #undef ASIO_PRIVATE_SET_VALUE_MEMBER_TRAIT_DEF 109 #endif // defined(ASIO_HAS_VARIADIC_TEMPLATES) 111 #else // defined(ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT) 113 template <
typename T,
typename Vs,
typename =
void>
116 #if defined(ASIO_HAS_VARIADIC_TEMPLATES) 118 template <
typename T,
typename... Vs>
121 is_same<T, typename remove_reference<T>::type>::value
122 && conjunction<is_same<Vs, typename decay<Vs>::type>...>::value,
123 typename conditional<
124 is_same<T, typename add_const<T>::type>::value,
126 traits::set_value_member<typename add_const<T>::type, void(Vs...)>
128 traits::set_value_member<
129 typename remove_reference<T>::type,
130 void(typename decay<Vs>::type...)>
135 #else // defined(ASIO_HAS_VARIADIC_TEMPLATES) 137 template <
typename T>
140 is_same<T, typename remove_reference<T>::type>::value,
141 typename conditional<
142 is_same<T, typename add_const<T>::type>::value,
144 traits::set_value_member<typename add_const<T>::type, void()>
146 traits::set_value_member<typename remove_reference<T>::type, void()>
151 #define ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME(n) \ 152 ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_##n 154 #define ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_1 \ 155 && is_same<T1, typename decay<T1>::type>::value 156 #define ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_2 \ 157 ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_1 \ 158 && is_same<T2, typename decay<T2>::type>::value 159 #define ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_3 \ 160 ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_2 \ 161 && is_same<T3, typename decay<T3>::type>::value 162 #define ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_4 \ 163 ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_3 \ 164 && is_same<T4, typename decay<T4>::type>::value 165 #define ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_5 \ 166 ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_4 \ 167 && is_same<T5, typename decay<T5>::type>::value 168 #define ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_6 \ 169 ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_5 \ 170 && is_same<T6, typename decay<T6>::type>::value 171 #define ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_7 \ 172 ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_6 \ 173 && is_same<T7, typename decay<T7>::type>::value 174 #define ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_8 \ 175 ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_7 \ 176 && is_same<T8, typename decay<T8>::type>::value 178 #define ASIO_PRIVATE_SET_VALUE_MEMBER_TRAIT_DEF(n) \ 179 template <typename T, ASIO_VARIADIC_TPARAMS(n)> \ 180 struct set_value_member_trait<T, void(ASIO_VARIADIC_TARGS(n))> : \ 182 is_same<T, typename remove_reference<T>::type>::value \ 183 ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME(n), \ 184 typename conditional< \ 185 is_same<T, typename add_const<T>::type>::value, \ 186 no_set_value_member, \ 187 traits::set_value_member< \ 188 typename add_const<T>::type, \ 189 void(ASIO_VARIADIC_TARGS(n))> \ 191 traits::set_value_member< \ 192 typename remove_reference<T>::type, \ 193 void(ASIO_VARIADIC_DECAY(n))> \ 198 ASIO_VARIADIC_GENERATE(ASIO_PRIVATE_SET_VALUE_MEMBER_TRAIT_DEF)
199 #undef ASIO_PRIVATE_SET_VALUE_MEMBER_TRAIT_DEF 200 #undef ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME 201 #undef ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_1 202 #undef ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_2 203 #undef ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_3 204 #undef ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_4 205 #undef ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_5 206 #undef ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_6 207 #undef ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_7 208 #undef ASIO_PRIVATE_SET_VALUE_MEMBER_IS_SAME_8 210 #endif // defined(ASIO_HAS_VARIADIC_TEMPLATES) 212 #endif // defined(ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT) 217 template <
typename T,
typename Vs,
typename>
218 struct set_value_member_default :
223 template <
typename T,
typename Vs,
typename>
224 struct set_value_member :
225 set_value_member_default<T, Vs>
232 #include "asio/detail/pop_options.hpp" 234 #endif // ASIO_TRAITS_SET_VALUE_MEMBER_HPP Definition: set_value_member.hpp:36
Definition: set_value_member.hpp:44
Definition: set_value_member.hpp:114
Definition: set_value_member.hpp:39
Definition: any_io_executor.hpp:28