Инициализация значения с использованием void{} в Clang временного объекта void в операторе возврата [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Инициализация значения с использованием void{} в Clang временного объекта void в операторе возврата [дубликат]

Сообщение Anonymous »

Если я не ошибаюсь, в шаблонах функций разрешено писать return void(), чтобы избежать ненужных специализаций и перегрузок для типа void.
В то же время аналогичный синтаксис return void{} не распознается Clang:

Код: Выделить всё

template
T foo() { return T(); }

template
T bar() { return T{}; }

int main() {
// ok everywhere
foo();

// error in Clang
bar();
}
Clang 16 выводит ошибку:

Код: Выделить всё

error: illegal initializer type 'void'
Интернет-демо: https://gcc.godbolt.org/z/6o89reK3G
В cppreference я не нашел ответа: и T(), и T{} должны вести себя одинаково для неагрегированных типов. А по поводу типа void особых замечаний нет.
Это просто баг Clang, или наоборот, это единственный компилятор, строго следующий стандарту?

Подробнее здесь: https://stackoverflow.com/questions/765 ... -return-st

Вернуться в «C++»