Рассмотрим следующий пример:
#include <cstdlib>
int main() {
const int m = 42;
[] { m; }(); // OK
const int n = std::rand();
[] { n; }(); // error: 'n' is not captured
}
Почему мне нужно захватить n
во второй лямбда, но не m
в первой лямбда? Я проверил раздел 5.1.2 (Лямбда-выражения) в стандарте С++ 14, но мне не удалось найти причину. Можете ли вы указать мне абзац, в котором это объясняется?
Обновление: я наблюдал это поведение как с GCC 6.3.1, так и с 7 (trunk). Clang 4.0 и 5 (trunk) завершаются с ошибкой в обоих случаях (variable 'm' cannot be implicitly captured in a lambda with no capture-default specified
).