[cfe-dev] c++ question: can lambda be used in VLA?

Akira Hatanaka via cfe-dev cfe-dev at lists.llvm.org
Tue May 24 14:47:20 PDT 2016


I believe this is not allowed in standard c++ but is allowed as a C99
extension.

I can silence the error if I replace the call to ParseConstantExpression at
ParseDecl.cpp:6098 with ParseExpression, but it also causes other
regression tests to fail.

I also tried adding a flag IsArrayBound to
ExpressionEvaluationContextRecord, which indicates the expression is used
for an array bound. The value of the flag is checked In
Sema::PopExpressionEvaluationContext and diagnostics for lambda expression
are not emitted if the flag is true.

On Wed, May 11, 2016 at 3:37 PM, Akira Hatanaka <ahatanak at gmail.com> wrote:

> clang currently errors out if I use lambda to compute the size of an array:
>
> $ cat t.cpp
> int foo3();
>
> void foo() {
>   unsigned char a1[([](int a) {return a; })(1)];
> }
>
> $ clang++ t.cpp -c -std=c++11
>
>  *error: **a lambda expression may not appear inside of a constant
> expression*
>
>   unsigned char a1[([](int a) { return a; })(1)];
>
>
> I was wondering why this isn't allowed since clang supports VLA. If a1 is
> a VLA, the size of the array doesn't have to be a constant expression, so
> it seems that we should be able to use lambda in this example?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160524/91ab0258/attachment.html>


More information about the cfe-dev mailing list