https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63192
Bug ID: 63192 Summary: non-mutable lambda capture by value on reference does not apply const Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: minor Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: dacamara.cameron at gmail dot com This is an example taken directly from the standard (5.1.2.19) with a bit of decoration for output. The last case produces false when it should be true. int main() { float x, &r = x; std::cout<<std::boolalpha; [=] { // x and r are not captured (appearance in a decltype operand is not an odr-use) std::cout<<std::is_same<decltype(x), float>::value<<'\n' // has type float <<std::is_same<decltype((x)), float const&>::value<<'\n' // has type float const& because this lambda // is not mutable and x is an lvalue <<std::is_same<decltype(r), float&>::value<<'\n' // r1 has type float& (transformation not considered) <<std::is_same<decltype((r)), float const&>::value; // r2 has type float const& }(); }