Subject: Re: [boost] RFC Expression Validity Asserts
From: TONGARI J (tongari95_at_[hidden])
Date: 2015-01-22 23:05:57
2015-01-23 11:16 GMT+08:00 Matt Calabrese <rivorus_at_[hidden]>:
> On Thu, Jan 22, 2015 at 6:49 PM, TONGARI J <tongari95_at_[hidden]> wrote:
> > You're right, I misunderstood the situation.
> > Your code doesn't work for clang, it seems to be more strict than g++:
> > "error: a lambda expression may not appear inside of a constant
> > expression"
> > I suspect it's also a bug, since a hand-written functor does compile.
> Hmm, this might be the problem, but I'm still not sure if this is a
> compiler bug or not. According to the standard, the type of the object
> yielded by a lambda expression has an implicitly declared default
> constructor/copy constructor/destructor as they are for any other type, and
> since the type is stateless, that would mean that those operations are
> constexpr. I don't mind that operator() isn't constexpr because I never
> actually use it as such.
> I suppose that if someone were to be pedantic, they could argue that even
> though all of the constructors are constexpr, the object still might not
> necessarily be a constant expression. Still, I'm not certain that the
> omission of such a detail would imply that the object isn't a constant
> expression. I think the standard may have just unintentionally left this
> unspecified, in which case it would be valid for a compiler to accept this
> code or for a compiler to deny the code.
Not sure if this helps:
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk