Предупреждение C++ о косвенном использовании ссылки на временныйC++

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

Сообщение Anonymous »

Я обнаружил ошибку в некотором коде, вызванную получением ссылки на временный объект, хотя и косвенно. Первоначальный автор ожидал, что на этот случай будет распространяться правило, делающее ссылку действительной (случай 1). Вместо этого я ожидал, что будет выдано предупреждение, как в случае 2.
Вместо этого мы получили ошибку без предупреждения от gcc в случае 3 или 4, но я получаю предупреждение от clang в MWE ниже (проверено на godbolt). Мой вопрос заключается в том, требуется ли диагностика по стандарту С++ в случаях 2 и 3, 4, только в случае 2 или не требуется вообще.
#include
#include

std::vector return_temporary() {
std::vector r{1,2,3,4,5,6,7,8,9};
return r;
}

int main() {
//case 1: correct, the const reference extends lifetime of the vector.
const std::vector& refvt = return_temporary();
std::cout

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

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

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

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

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

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