C++ Logo


Advanced search

Most vexing parse and lambda captures

From: Myria <myriachan_at_[hidden]>
Date: Thu, 4 May 2023 16:37:41 -0700
Let's say you have this as a lambda:

int a = ...;
auto lambda = [x(int(a))]{ return x + 1 };

<https://eel.is/c++draft/expr.prim.lambda.capture#6> says the following:

An *init-capture* inhabits the lambda scope ([basic.scope.lambda]) of the
An *init-capture* without ellipsis behaves as if it declares and explicitly
captures a variable of the form “auto *init-capture* ;”, except that

The "auto init-capture ;" part seems wrong here, because the lambda above
would fall to the most vexing parse rule:

auto x(int(a)); // declares a function, not an int

I guess this could be an editorial-level issue? Clearly the Standard's
intent is that x would be interpreted as an int here, rather than be a very
weird application of the most vexing parse rule...?


Received on 2023-05-04 23:37:54