Clang 22 изменился при возврате временной ссылки?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Clang 22 изменился при возврате временной ссылки?

Сообщение Anonymous »

Я знаю, что следующее поведение является неопределенным, но мне интересно, почему моя версия Clang вообще не компилирует его:

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

class Registry2
{public:
template 
component_t& getComponent()
{
component_t t;
return t;
}
};

int main(int argc, char* argv[])
{

Registry2 registry;
auto& ref = registry.getComponent();
}
У меня есть:

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

-Werror=return-type
-Wno-unused-variable
Флаги установлены на компиляторе, и Godbolt Clang компилирует его только с «предупреждением»:

предупреждение: ссылка на стековую память, связанную с локальной переменной 't'
возвращается [-Wreturn-stack-address]

Однако на моем компиляторе Clang 22, он не компилируется и говорит:

ошибка: неконстантная ссылка lvalue на тип 'int' не может быть привязана к
временному значению типа 'int' 65 | return t;

Что случилось, что это изменилось? Это специфично для Clang версии 22?

Подробнее здесь: https://stackoverflow.com/questions/798 ... -reference
Ответить

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

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

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

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

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