17 template<
typename R,
typename... Args>
18 std::tuple<R, Args...>*
TypeGetter (R (*) (Args...));
23 template<
typename C,
typename R,
typename... Args>
24 std::tuple<R, Args...>*
TypeGetter (R (C::*) (Args...)
const);
26 template<
typename C,
typename R,
typename... Args>
27 std::tuple<R, Args...>*
TypeGetter (R (C::*) (Args...));
39 template<SomeInvokable F,
size_t Idx>
40 using ArgType_t = std::tuple_element_t<Idx + 1, detail::CallTypeGetter_t<F>>;
42 template<SomeInvokable F>
43 using RetType_t = std::tuple_element_t<0, detail::CallTypeGetter_t<F>>;
45 template<SomeInvokable F>
46 inline constexpr
auto ArgCount_v = std::tuple_size_v<detail::CallTypeGetter_t<F>> - 1;
55 template<
typename R,
typename C>
63 template<
typename PtrType>
66 template<
typename PtrType>
decltype(TypeGetter(&C::operator())) TypeGetter(const C &c)
std::decay_t< decltype(*detail::TypeGetter(*static_cast< F * >(nullptr)))> CallTypeGetter_t
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< 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_element_t< 0, detail::CallTypeGetter_t< F > > RetType_t