13 #include <type_traits>
58 template <
class Default,
class AlwaysVoid,
template <
class...>
class Op,
69 template <
class Default,
template <
class...>
class Op,
class...
Args>
86 template <
template <
class...>
class Op,
class...
Args>
94 template <
template <
class...>
class Op,
class...
Args>
103 template <
class Expected,
template <
class...>
class Op,
class...
Args>
112 template <
class To,
template <
class...>
class Op,
class...
Args>
121 template <
class Default,
template <
class...>
class Op,
class...
Args>
131 template <
bool... Bs>
137 template <
bool... Bs>
142 template <
bool... Bs>
148 template <
template <
class...>
class Op,
class...
Args>
155 template <
class To,
template <
class...>
class Op,
class...
Args>
162 template <
class Exact,
template <
class...>
class Op,
class...
Args>
172 template <
typename T,
typename R,
template <
class...>
class M,
173 typename... Arguments>
181 template <
typename T,
template <
class...>
class M,
typename V>
327 #define METHOD_TRAIT(trait_name, method_name) \
328 template <class T, typename R, typename... Arguments> \
329 struct trait_name { \
332 template <typename T_> \
333 static constexpr bool is_const = \
334 not std::is_same_v<std::remove_const_t<T_>, T_>; \
345 template <typename T_, typename = int> \
347 template <typename... Arguments_> \
348 using type = typename std::integral_constant< \
349 decltype(std::declval<T_>().method_name( \
350 std::declval<Arguments_>()...)) (T_::*)(Arguments_...), \
351 &T_::method_name>::value_type; \
358 template <typename T_> \
359 struct fptr_meta<T_, std::enable_if_t<is_const<T_>, int>> { \
360 template <typename... Arguments_> \
361 using type = typename std::integral_constant< \
362 decltype(std::declval<T_>().method_name( \
363 std::declval<Arguments_>()...)) (T_::*)(Arguments_...) const, \
364 &T_::method_name>::value_type; \
368 template <typename T_, typename... Arguments_> \
369 using fptr_meta_t = typename fptr_meta<T_>::template type<Arguments_...>; \
373 template <typename T_, typename... Arguments_> \
374 using qual_ret = decltype(std::declval<T_>().method_name( \
375 std::declval<Arguments_>()...)); \
385 template <typename T_, typename = int> \
387 static constexpr bool value = false; \
389 template <typename T_> \
390 struct tv<T_, std::enable_if_t<Acts::Concepts::is_detected_exact< \
391 R, qual_ret, T_, Arguments...>::value, \
394 static constexpr bool value = \
395 Acts::Concepts::is_detected<fptr_meta_t, T, Arguments...>::value; \