Указывается с точки зрения того, когда сущность должна быть захвачена, а не с точки зрения того, когда она не может.
[expr.prim.lambda. capture] (с некоторыми пропусками)
8 ... Если лямбда-выражение или экземпляр шаблона оператора вызова функции универсального лямбда-выражения используют это илипеременная с автоматической продолжительностью хранения от ее достигающей области, этот объект должен быть захвачен лямбда-выражением...
[Пример:
void f1(int i) {
int const N = 20;
auto m1 = [=]{
int const M = 30;
auto m2 = [i]{
int x[N][M]; // OK: N and M are not odr-used
// ...
};
};
// ...
}
- конец примера]
Ключ в вашем примере кода заключается в том, что var
не используется odrпотому что это неоцененный операнд. Как таковой, он не должен быть захвачен.