Я обнаружил ошибку в некотором коде, вызванную получением ссылки на временный объект, хотя и косвенно. Первоначальный автор ожидал, что на этот случай будет распространяться правило, делающее ссылку действительной (случай 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