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

James Dennett via cfe-dev cfe-dev at lists.llvm.org
Wed May 25 16:37:46 PDT 2016


On Wed, May 25, 2016 at 4:19 PM, Akira Hatanaka <ahatanak at gmail.com> wrote:

> On Tue, May 24, 2016 at 7:11 PM, James Dennett <james.dennett at gmail.com>
> wrote:
>
>> On Tue, May 24, 2016 at 6:25 PM, Akira Hatanaka via cfe-dev <
>> cfe-dev at lists.llvm.org> wrote:
>>
>>> I wasn't requesting that clang accept lambda expressions used for array
>>> bounds but was asking whether it was valid in c++. Is this something that
>>> is open to interpretation because it's not covered by the standard?
>>>
>>> FYI, this isn't something that I made up. It was in a code a user wrote.
>>>
>>>
>> It's covered by the standard, and as Clang's error message says, lambdas
>> are not allowed in constant expressions in C++11 or C++14.
>>
>>
> Yes, the c++ standard gives a list of subexpressions that are not allowed
> in constant expressions and lambda expression is one of them.
>
> This doesn't seem to apply to C99's extension for variable length arrays
> because array sizes are not required to be constant expressions.
>
>
I was replying to you saying that you were "asking whether it was valid in
C++", and whether "it's not covered by the standard".

C99 doesn't have lambdas, so it doesn't allow this.  C++ doesn't have VLAs,
so it doesn't allow it.

The de facto language accepted by Clang doesn't accept it, as you already
noted.

There's no specification that tells us what the "right thing to do" is
here.  We could extend Clang to support this non-standard combination of
C99 with C++11, and it might even make it a little more consistent, but if
it adds any implementation complexity then it may not be worthwhile to
support a corner case that's not allowed by any language standard.

-- James
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160525/11f37b46/attachment.html>


More information about the cfe-dev mailing list