Ответ 1
Вы передаете идентификатор типа, который определен в [dcl.name] как
[...] синтаксически объявление для переменной или функции этого типа, которая опускает имя объекта. [...] Можно однозначно идентифицировать местоположение в абстрактном-деклараторе, где идентификатор будет выглядеть , если конструкция была декларатором в объявлении. Именованный тип тогда совпадает с типом гипотетический идентификатор.
Для гипотетического идентификатора, который должен иметь некоторый тип, гипотетическое объявление должно быть хорошо сформировано в первую очередь. Но это не соответствует [dcl.fct]/10. Следовательно, программа плохо сформирована (и сообщения об ошибках компиляторов на самом деле понятны). Этот случай также более непосредственно покрывается [temp.deduct]/(8.10), подразумевая, что это (SFINAE-дружественная) ошибка.
Фактически, просто подразумевается использование недопустимого типа, чтобы сделать программу плохо сформированной. Например. создание указателя типа функции возврата функции плохо сформировано:
using f = int();
using t = f(*)();
Итак, следующее:
struct A {virtual void f() = 0;};
using t = A(*)();
(Clang не должен принимать это. C.f. Ошибка GCC 17232 интересное обсуждение).