оба компилятора верны.
аружил, что gcc и clang позволяют использоватьdecltype(auto)
в предложении типа параметра шаблона нетипичного типа. Например.:
template <decltype(auto)>
struct X {};
int foo ;
int main() {
X<(foo)> x;
static_cast<void>(x);
}
[живое демо gcc] [живой демо-лязг]
Это стандартная совместимая функция или расширение GNU?