Можете ли вы привести пример по этому вопросу: лямбда-выражение - PullRequest
3 голосов
/ 24 мая 2011

Точка из n3290: стандартная тяга ISO, §5.1.2 / 9

A лямбда-выражение , наименьшая охватывающая область которого является областью блока (3.3.3) является локальным лямбда-выражением ; любое другое лямбда-выражение не должно иметь захват-список в его лямбда-вводчике . достигающая область действия местного Лямбда-выражение представляет собой набор областей, включающих до внутренняя ограждающая функция и ее параметры. [ Примечание : эта область охвата включает любое промежуточное лямбда-выражение - конечная нота ]

Может ли кто-нибудь дать пример для вышеуказанного пункта, особенно: "у другого лямбда-выражения не должно быть списка захвата в его лямбда-представителе." Где возникает такая ситуация?

1 Ответ

6 голосов
/ 24 мая 2011

Ситуация теоретически должна возникать в области имен, как @ Space_C0wb0y показывает в ссылку на свой комментарий .

#include <iostream>

int x = 12;
auto l = [&x](){ return x; };

int main() {
    std::cout << l() << std::endl;
}

Если вам странно, что GCC принимает этот фрагмент, поскольку MSVC правильно отклоняетэто со следующим сообщением об ошибке:

ошибка C3480: 'x': переменная захвата лямбды должна быть из области действия функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...