http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56976
Bug #: 56976
Summary: using braces to initialize a reference forces copy
construction
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: [email protected]
ReportedBy: [email protected]
Hi all,
I hope this is not yet another buggy bug report. I have browsed the draft (I
don't have the current standard), and saw nothing clear cut, yet the principle
of least surprise tends to think this is really a bug.
Below, using braces to initialize a const-ref forces a call to a
copy-constructor. clang compiles this without error/warning. Cheers!
$ cat bar.cc
struct bar
{
bar() = default;
bar(const bar&) = delete;
};
int main()
{
bar b;
const bar& b1_(b);
const bar& b2_{b};
}
$ g++-mp-4.8 -std=c++11 -Wall -Wno-unused-variable bar.cc
bar.cc: In function 'int main()':
bar.cc:11:19: error: use of deleted function 'bar::bar(const bar&)'
const bar& b2_{b};
^
bar.cc:4:3: error: declared here
bar(const bar&) = delete;
^
$ clang++-mp-3.2 -std=c++11 -Wall bar.cc -Wno-unused-variable
$