40 template<
typename F,
template<
typename...>
class List,
typename... Args>
41 constexpr List<Args...>
GetInvokablePartImpl (
int, List<Args...>,
typename std::result_of<F (Args...)>::type* =
nullptr)
46 template<
typename F,
template<
typename...>
class List>
52 template<
typename F,
typename List>
55 template<
typename F,
template<
typename...>
class List,
typename... Args>
61 template<
typename F,
typename List>
64 using RetType_t = decltype (GetInvokablePartImpl<F> (0, List {}));
67 template<
typename F,
typename... Args>
73 template<
template<
typename...>
class List,
typename... Args>
74 constexpr
size_t Length (List<Args...>)
76 return sizeof... (Args);
88 template<
typename F,
typename List>
91 template<
typename F,
template<
typename...>
class List,
typename... Args>
107 template<
typename... Args>
112 return Invoke (invokableList, ignoreList, args...);
115 template<
typename... InvokableArgs,
typename... Rest>
118 return F_ (std::forward<InvokableArgs> (args)...);
constexpr detail::ExprTree< detail::ExprType::LeafStaticPlaceholder, detail::MemberPtrs< Ptr > > f
std::result_of_t< F(Args...)> RetType_t
typename Dumbifier< T >::Type_t Dumbify
constexpr size_t Length(List< Args... >)
decltype(GetInvokablePartImpl< F >(0, List {})) RetType_t
detail::Dropper< F > DropArgs(const F &f)
std::conditional_t< std::is_same_v< detail::RetTypeRaw_t< F >, detail::ReturnsVoid >, void, detail::RetTypeRaw_t< F > > RetType_t
constexpr detail::DropImpl< N, List< Args... > >::Result_t Drop(List< Args... >)
constexpr List< Args... > GetInvokablePartImpl(int, List< Args... >, typename std::result_of< F(Args...)>::type *=nullptr)
auto operator()(Args... args) -> typename InvokableResGetter< F, decltype(GetInvokablePart< F, Args... >())>::RetType_t
constexpr auto GetInvokablePart() -> decltype(GetInvokablePartImpl< F >(0, Typelist< Args... >