Это ошибка в GCC.
Обратите внимание, что если заменить круглые скобки фигурными скобками, код скомпилируется:
auto x2 = X{}; // now compiles in clang and gcc
X<> x3 = X{}; // now compiles in clang and gcc
Это не вывод аргумента шаблона класса, посколькуне выводятся аргументы шаблона. Вывод аргумента шаблона класса должен разрешать исключение фигурных скобок.Использование ()
или {}
в этом случае не должно иметь никакого отношения к тому, выводятся ли они.