Ответ 1
На самом деле, нет. Стандарт явно запрещает такое объявление в [temp] p2;
Декларация в декларации шаблона (если таковая имеется)
объявить или определить функцию, класс или переменную, или
определить функцию-член, класс-член, перечисление элемента или статический элемент данных шаблона класса или класса, вложенного в шаблон класса, или
определить шаблон-член шаблона класса или класса или
быть руководством по вычету или
быть объявлением псевдонимов.
Пустое объявление не соответствует ни одному из этих предложений. Теперь в стандарте говорится, что для выдачи диагностического сообщения требуется выполнение для любого нарушения его правил, как этот. Обратите внимание, что он говорит о диагностике, он не указывает, выдается ли предупреждение или ошибка (или даже заметка). Компилятор может предоставить расширения, которые делают то, что вы написали, так как это не изменит смысл хорошо сформированной программы.
Так что нет, оба правы. Тем не менее, поведение clang связано с расширением, а не с тем, что указывает стандарт.