Исходя из другого вопроса:
Поскольку С++ 17, auto x0{1, 2, 3, 4};
, ранее выводящий список инициализаторов, больше не допускается (конечно, мы можем использовать auto x0 = {1, 2, 3, 4};
вместо этого...). Теперь, как всегда, избегаем равномерной инициализации (например, std::vector<int> v({1, 2, 3, 4});
, т.е. Явный вызов конструктора с списком инициализации в качестве аргумента) и по аналогии с четко определенным auto x(7);
(конструкцию я никогда не буду использовать сам...), я придумал следующее:
auto x({1, 2, 3, 4});
// -> std::initializer_list<int> x({1, 2, 3, 4});
Это скомпилировано с GCC 7.2.0 (mingw64), но выдается предупреждение (в то время как прокомментированная версия снова не была):
list-initializer for non-class type must not be parenthesized
Я не мог найти ничего подходящего в стандарте, так что теперь вопрос (из чистого интереса...):
Почему это не разрешено? (Является ли это охватываемым стандартом или нам нужно считать это ошибкой GCC?)