Взятие адреса временного разрешено, если результат функции потребляется [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Взятие адреса временного разрешено, если результат функции потребляется [дубликат]

Сообщение Anonymous »

Я работаю в Visual Studio и наблюдаю, что функция, принимающая константный указатель, может быть вызвана с временным указателем в зависимости от использования результата функции.
Минимальный пример, который я мог бы сократить из своего кода, выглядит следующим образом:

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

struct B { virtual ~B() {} };

struct A : B {};

A foo(const B*) { return {}; }

A bar() { return {}; }

int main() {
//foo(&bar()); //error
auto v = foo(&bar()); //ok in MSVC
}
Здесь простой вызов foo(&bar()) приводит к ошибке:

C2102: '&' требует l-значения

А более длинная строка auto v = foo(&bar()); подходит для MSVC. Онлайн-демо
Действительно ли вторая строка разрешена в C++, а первая — нет?

Подробнее здесь: https://stackoverflow.com/questions/798 ... s-consumed

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