Взятие адреса временного разрешено, если результат функции потребляется [дубликат]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
Ответить

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

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

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

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

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