std::experimental::invocation_type, std::experimental::raw_invocation_type - cppreference.com (original) (raw)

Defined in header <experimental/type_traits>
template< class > struct raw_invocation_type; //undefined template< class Fn, class... ArgTypes > struct raw_invocation_type<Fn(ArgTypes...)>; (1) (library fundamentals TS)
template< class > struct invocation_type; //undefined template< class Fn, class... ArgTypes > struct invocation_type<Fn(ArgTypes...)>; (2) (library fundamentals TS)

Computes the invocation parameters when Fn is called with the arguments ArgTypes..., as in INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...), where INVOKE is the operation defined in Callable.

The invocation parameters of the expression INVOKE(f, t1, t2, ..., tN) is defined as follows, where T1 is the (possibly cv-qualified) type of t1 and U1 is T1& if t1 is an lvalue and T1&& otherwise:

If an argument tI matches an ellipsis in the function's parameter list, the corresponding invocation parameter is the result of applying the default argument promotions to tI.

Fn and all types in ArgTypes can be any complete type, array of unknown bound, or (possibly cv-qualified) void.

[edit] Member types

Member type Definition
raw_invocation_type<Fn(ArgTypes...)>::type R(T1, T2, ...), where: R is std::result_of_t<Fn(ArgTypes...)>. T1, T2, ... are the invocation parameters of INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...) as defined above. Only defined if Fn can be called with the arguments ArgTypes... in unevaluated context.
invocation_type<Fn(ArgTypes...)>::type R(U1, U2, ...), where R is std::result_of_t<Fn(ArgTypes...)>. T1, T2, ... are the invocation parameters of INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...) as defined above. A1, A2, ... denotes ArgTypes... Ui is std::decay_t<Ai> if std::declval<Ai>() is an rvalue and Ti otherwise. Only defined if Fn can be called with the arguments ArgTypes... in unevaluated context.

[edit] Helper types

| template< class T > using raw_invocation_type_t = typename raw_invocation_type<T>::type; | | (library fundamentals TS) | | ------------------------------------------------------------------------------------------------ | | ------------------------- | | template< class T > using invocation_type_t = typename invocation_type<T>::type; | | (library fundamentals TS) |

[edit] Example

[edit] See also