Proposed resolution:
This wording is relative to N4023.
Change Table 3, [meta.trans.other] in the Library TS as indicated:
Table 3 — Other type transformations Template Condition Comments … template <class Fn, class... ArgTypes>
struct invocation_type<Fn(ArgTypes...)>;Fn and all types in the parameter pack ArgTypes
shall be complete types, (possibly cv-qualified) void,
or arrays of unknown bound.The nested typedef invocation_type<Fn(ArgTypes...)>::type
shall be defined as follows. If
raw_invocation_type<Fn(ArgTypes...)>::type
does not exist, there shall be no member typedef type. Otherwise:
Let A1, A2, … denote ArgTypes...
Let R(T1, T2, …) denote
raw_invocation_type_t<Fn(ArgTypes...)>Then the member typedef type shall name the function
type R(U1, U2, …) where Ui is decay_t<Ai>
if declval<Ai>() is an rvalue otherwise Ti.If raw_invocation_type<Fn(ArgTypes...)>::type
is the function type R(T1, T2, …)
and Fn is a pointer to member type and T1 is
an rvalue reference, then R(decay<T1>::type,
T2, …).
Otherwise, raw_invocation_type<Fn(ArgTypes...)>::type.