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