http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56039
--- Comment #5 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2013-01-19 20:20:43 UTC --- (In reply to comment #4) > (In reply to comment #3) > I seem to find that the expression in question > > > > false && [](){} > > > is valid because there is a implicit conversion sequence consisting of a > user-defined conversion to pointer-to-function followed by a conversion to > bool > from the pointer type. I agree, I missed the existence of the conversion function when arguing about the expression. Let me add that for exactly the use-case you presented here (std::is_constructible) I would have loved to have it defined in terms of a lambda expression. But I guess that this is not what will be decided on that guess (but maybe I'm just biased)