Open
Description
Bugzilla Link | 22604 |
Version | trunk |
OS | All |
Extended Description
In the following, it is observed that (consistent with the resolution to DR1472) the appearance of ref
in the lambda did not cause the creation of a corresponding member of the closure type since there is no complaint from Clang about the deleted copy constructor.
Since said appearance of ref
does not refer to a member of the closure type, it appears that Clang wrong in its complaining about const
in the output below. At the same time, adding mutable
to the lambda-declarator
should not make a difference, but it does with Clang.
SOURCE (<stdin>
):
struct A {
A() = default;
A(const A &) = delete;
} globalA;
int main() {
A &ref = globalA, *bar(A &);
[=]() { bar(ref); };
}
COMPILER INVOCATION:
clang -cc1 -Wno-unused-value -std=c++11 -x c++ -
ACTUAL OUTPUT:
<stdin>:8:16: error: binding of reference to type 'A' to a value of type 'const A' drops qualifiers
[=]() { bar(ref); };
^~~
<stdin>:7:30: note: passing argument to parameter here
A &ref = globalA, *bar(A &);
^
1 error generated.
EXPECTED OUTPUT:
(Clean compile)
COMPILER VERSION INFO:
clang version 3.7.0 (trunk 229397)
Target: x86_64-unknown-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/local/gcc-4.8.2/lib/gcc/x86_64-unknown-linux-gnu/4.8.2
Selected GCC installation: /usr/local/gcc-4.8.2/lib/gcc/x86_64-unknown-linux-gnu/4.8.2
Candidate multilib: .;@m64
Selected multilib: .;@m64