17 template<
typename R,
typename... Args>
23 template<
typename C,
typename R,
typename... Args>
24 std::tuple<R,
const C, Args...>*
TypeGetter (R (C::*) (Args...)
const);
26 template<
typename C,
typename R,
typename... Args>
27 std::tuple<R, C, Args...>*
TypeGetter (R (C::*) (Args...));
29 template<
typename C,
typename R>
32 template<
typename C,
typename R,
typename... Args>
35 template<
typename C,
typename R,
typename... Args>
42 using CallTypeGetter_t = std::decay_t<decltype (*detail::TypeGetter (*static_cast<F*> (
nullptr)))>;
48 template<SomeInvokable F,
size_t Idx>
49 using ArgType_t = std::tuple_element_t<Idx + 1, detail::CallTypeGetter_t<F>>;
51 template<SomeInvokable F>
52 using RetType_t = std::tuple_element_t<0, detail::CallTypeGetter_t<F>>;
54 template<SomeInvokable F>
55 inline constexpr auto ArgCount_v = std::tuple_size_v<detail::CallTypeGetter_t<F>> - 1;
64 template<
typename R,
typename C>
72 template<
typename PtrType>
75 template<
typename PtrType>
std::tuple< R, Args... > * TypeGetter(R(*)(Args...))
std::decay_t< decltype(*detail::TypeGetter(*static_cast< F * >(nullptr)))> CallTypeGetter_t
std::tuple< R, Args... > * TypeGetterNoClass(R(C::*)(Args...) const)
std::tuple_element_t< 0, detail::CallTypeGetter_t< F > > RetType_t
constexpr auto ArgCount_v
typename detail::DecomposeMemberPtr< PtrType >::Value_t MemberTypeType_t
MemberTypeType_t< decltype(Ptr)> MemberPtrType_t
std::tuple_element_t< Idx+1, detail::CallTypeGetter_t< F > > ArgType_t
MemberTypeStruct_t< decltype(Ptr)> MemberPtrStruct_t
typename detail::DecomposeMemberPtr< PtrType >::StructType_t MemberTypeStruct_t