[Bug c++/70385] New: Lambda capture by reference of const reference fails
nikb at bougalis dot net
gcc-bugzilla@gcc.gnu.org
Wed Mar 23 23:44:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70385
Bug ID: 70385
Summary: Lambda capture by reference of const reference fails
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: nikb at bougalis dot net
Target Milestone: ---
Consider the following minimal MCVE:
const int& test()
{
int const static i = 0;
return i;
}
int
main()
{
auto square = [&j = test()]()
{
};
return 0;
}
The expectation here is that `pays` will be a `const int&`. Clang successfully
compiles this code (along with a warning about j being unused) but gcc fails to
compile with an interesting error:
error: binding 'const int' to reference of type 'int&' discards qualifiers
&j = test()
~~~~~^~
This is clearly wrong. I believe that the correct behavior would be for `j` to
be a `const int&`.
We can simplify the example a bit more. The following code successfully
compiles and appears to do the "right" thing on both clang and gcc:
int
main()
{
int const i = 0;
auto test = [&i]()
{
};
test();
return 0;
}
The following code compiles and does the "right" thing in clang, but not in
gcc, where compilation fails:
int
main()
{
int const i = 0;
auto test = [&j = i]()
{
};
test();
return 0;
}
More information about the Gcc-bugs
mailing list