Не может связать неконфессиональный при попытке вернуть ссылку на Global от LambdaC++

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

Сообщение Anonymous »

Я пытаюсь получить лямбду, чтобы вернуть ссылку на Global. Мой mcve < /p>

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

static int frob;

int& foo();

template 
auto bar(F f)
{
return f();
}

int& foo()
{
return bar([&](){
return frob;
});

// int* p;
// bar([&](){
//     p = &frob;
// });
// return *p;
}
Использование обходной реализации Foo проходит компиляцию, но в противном случае я получаю (от GCC 12.2.0)

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

error: cannot bind non-const lvalue reference of type ‘int&’ to an rvalue of type ‘int’
Я попытался создать int & внутри foo , чтобы сохранить ссылку на Frob Land (в надежде, что это сделает возвращенное выражение int & ), но это не помогло. Также перемещение frob в foo или даже лямбда тоже не помогла, однако это не альтернатива в моем фактическом случае.
Я немного немного Смущен ошибкой, так что в первую очередь вопрос, почему я в первую очередь получу ошибку (и во -вторых, как я могу обойти ее, все еще выводя результат из лямбды через оператор возврата).

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

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

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

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

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

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