Инициализация значения с использованием 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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