[Bug c++/79378] lambda init-capture adds const
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Feb 6 01:37:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79378
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2017-02-06
Ever confirmed|0 |1
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
We also get the r2 case wrong for the example in [expr.prim.lamda] p20:
template <class T, class U> struct is_same { static constexpr bool value =
false; };
template <class T> struct is_same<T, T> { static constexpr bool value = true;
};
void f3() {
float x, &r = x;
[=] {
// x and r are not captured (appearance in a decltype operand is not an
odr-use)
decltype(x) y1;
static_assert(is_same<decltype(y1), float>::value, "y1 has type float");
decltype((x)) y2 = y1;
static_assert(is_same<decltype(y2), float const&>::value, "y2 has type float
const& because this lambda is not mutable and x is an lvalue");
decltype(r) r1 = y1;
static_assert(is_same<decltype(r1), float&>::value, "r1 has type float&
(transformation not considered)");
decltype((r)) r2 = y2;
static_assert(is_same<decltype(r2), float const&>::value, "r2 has type float
const&");
};
}
lam2.cc: In lambda function:
lam2.cc:13:20: error: binding reference of type ‘float&’ to ‘const float’
discards qualifiers
decltype((r)) r2 = y2;
^~
lam2.cc:14:1: error: static assertion failed: r2 has type float const&
static_assert(is_same<decltype(r2), float const&>::value, "r2 has type float
const&");
^~~~~~~~~~~~~
More information about the Gcc-bugs
mailing list