Reputation: 271
I tried to compile the following C++11 code with mixed results.
struct NoTemplate {
static constexpr auto (*foo)() = false ? +[]{} : nullptr;
};
NoTemplate no_inst;
template<typename>
struct YesTemplate {
static constexpr auto (*foo)() = false ? +[]{} : nullptr;
};
YesTemplate<float> yes_inst;
NoTemplate
sucessfully; gives error: a lambda expression may not appear inside of a constant expression
on YesTemplate
.What is the correct result? I see some standard language suggesting non-constant expressions should be OK in the false branch of short-circuiting operators in constant expressions, but IANALL.
Upvotes: 7
Views: 293