Given two unqualified objects without an array, T1and T2can an expression true ? std::declval<T1>() : std::declval<T2>()be of type cv-qualified, array, or function? I am sure that he cannot, but I want to make sure that I did not miss anything.
Motivation: the current proposed resolution of LWG issue 2465 does not decay the type of conditional expression of the form true? std::declval<D1>() : std::declval<D2>()where D1it is D2created std::decay(and, therefore, are cv-unqualified objects without an array * ). This is true only if the expansion of the conditional expression type has no effect (which is not true if the type is a class with qualification, an array, or a function type ** ).
* Ignoring the case of "abnormal function types" that will never cause a valid expression, and the case void, which is a separate issue.
** Per [expr] / 5 , expressions never have a reference type.