New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CWG2838 [basic.scope.block] Declaration conflicts with grand-parent and grand-grand-parent scope declarations #475
Comments
Filed this previously as cplusplus/draft#6536 |
It seems that all versions of GCC and MSVC on Compiler Explorer accept the code, so changing the standard to ban it seems to have questionable value proposition. I mean I think we should have a core issue for this but we should immediately mark it NAD and say "write a paper for EWG" (where you presumably would attempt to quantify the amount of code that would be broken). |
clang rejects it in all versions I've tried. |
@t3nsor I would not agree with NAD, but this does somewhat sound like an ewg question, we could send them this issue. |
Full name of submitter (unless configured in github; will be published with the issue): Jakub Jelínek
Reference (section label): [basic.scope.block]/2
Link to reflector thread (if any):
Issue description: Is
supposed to be valid after the P2579R0 changes? Before that paper and before P2036R3 this wouldn't be valid, because
the capture inhabited the same scope as int i; P2036R3 changed it to inhabit the parameter scope, so parent scope of it
and then [basic.scope.block]/2 triggered there. But P2579R0 says that the init capture inhabits lambda scope and isn't that the parent scope of the parameter scope, i.e. grandparent scope of the lambda's compound statement's scope?
And for
auto f = [i = 5] <int N> () { int i; return 0; };
it is even grand-grandparent scope.Suggested resolution:
The text was updated successfully, but these errors were encountered: