17 template<
typename R,
typename... Args>
23 template<
typename C,
typename R,
typename... Args>
26 template<
typename C,
typename R,
typename... Args>
29 template<
typename C,
typename R>
32 template<
typename C,
typename R,
typename... Args>
35 template<
typename C,
typename R,
typename... Args>
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::decay_t< decltype(*detail::TypeGetter(*static_cast< F * >(nullptr)))> CallTypeGetter_t
decltype(TypeGetterNoClass(&C::operator())) TypeGetter(const C &c)
constexpr auto ArgCount_v
typename detail::DecomposeMemberPtr< PtrType >::StructType_t MemberTypeStruct_t
MemberTypeType_t< decltype(Ptr)> MemberPtrType_t
constexpr detail::ExprTree< detail::ExprType::LeafStaticPlaceholder, detail::MemberPtrs< Ptrs... > > tuple
constexpr detail::ExprTree< detail::ExprType::LeafStaticPlaceholder, detail::MemberPtrs< Ptr > > f
requires(Tup1Size==Tup2Size) const expr auto ZipWith(Tup1 &&tup1
typename detail::DecomposeMemberPtr< PtrType >::Value_t MemberTypeType_t
std::tuple_element_t< Idx+1, detail::CallTypeGetter_t< F > > ArgType_t
MemberTypeStruct_t< decltype(Ptr)> MemberPtrStruct_t
std::tuple< R, Args... > * TypeGetterNoClass(R(C::*)(Args...) const)
std::tuple_element_t< 0, detail::CallTypeGetter_t< F > > RetType_t