[Bug c++/52026] [c++0x] Constexpr Variable Appears Uninitialized in Lambda
matt at godbolt dot org
gcc-bugzilla@gcc.gnu.org
Tue Jan 29 13:31:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52026
Matt Godbolt <matt at godbolt dot org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |matt at godbolt dot org
--- Comment #10 from Matt Godbolt <matt at godbolt dot org> 2013-01-29 13:31:01 UTC ---
I have a smaller reproduction case, and some extra information:
References to non-explicitly captured constant values in template functions
generate invalid code.
An empty capture list fails to error, and generates invalid code. A catch-all
capture list ([=] or [&]) correctly compiles, but generates invalid code.
A capture list that explicitly captures the constant value by reference or
value compiles and generates correct code.
With -Wall -Wextra, the constant is flagged as "uninitialized".
The code compiles and works correctly on GCC 4.5.2, but fails on GCC 4.6.3 and
GCC 4.7.2.
template<bool B>
int func() {
const int constVal = B ? 100 : -100;
return [] { return constVal; }();
}
int main(int, const char* []) {
return func<true>(); // Returns 100 in -O0, but 0 in -O1 and above
}
More information about the Gcc-bugs
mailing list