<div dir="ltr"><div>I believe this is not allowed in standard c++ but is allowed as a C99 extension. </div><div><br></div><div>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.<br></div><div><br></div><div>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.<div><br></div><div><div class="gmail_extra"><div class="gmail_quote">On Wed, May 11, 2016 at 3:37 PM, Akira Hatanaka <span dir="ltr"><<a href="mailto:ahatanak@gmail.com" target="_blank">ahatanak@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>clang currently errors out if I use lambda to compute the size of an array:</div><div><br></div><div>$ cat t.cpp</div>int foo3();<div><br></div><div><div>void foo() {</div><div>  unsigned char a1[([](int a) {return a; })(1)];</div><div>}</div></div><div><br></div><div>$ clang++ t.cpp -c -std=c++11</div><div><br></div><div><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span><b> </b></span><span style="color:rgb(195,55,32)"><b>error: </b></span><span><b>a lambda expression may not appear inside of a constant expression</b></span></p>
<p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>  unsigned char a1[([](int a) { return a; })(1)];</span></p><p style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><br></p><p style="margin:0px;line-height:normal">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?</p></div></div>
</blockquote></div><br></div></div></div></div>