Per [declval] , подпись declval
:
template <class T>
add_rvalue_reference_t<T> declval() noexcept;
Следовательно, вызов некорректен, если add_rvalue_reference_t<T>
не может произойти в качестве спецификатора типа возврата.
Квалифицированные типы функций имеют специальное правило:
Тип функции с cv-qualifier-seq или ref-qualifier (включая тип с именем typedef-name ([dcl.typedef], [temp.param])) должен отображаться только как:
(6.1)тип функции для нестатической функции-члена,
(6.2) тип функции, к которой относится указатель на член,
(6.3) тип функции верхнего уровня объявления typedef функции или объявление псевдонима ,
(6.4) идентификатор типа варгумент по умолчанию для параметра типа или
(6.5) идентификатор типа аргумента шаблона для параметр типа ([temp.arg.type]).
Tэй не может быть спецификатором типа возвращаемого значения.
Просматривая Типы , я почти уверен, что квалифицированные типы функций - единственный случай.