This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/42352] New: -std=c++0x reference binding problem
- From: "rwgk at yahoo dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 11 Dec 2009 18:04:09 -0000
- Subject: [Bug c++/42352] New: -std=c++0x reference binding problem
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Platform:
Fedora release 12 (Constantine)
Linux cage.lbl.gov 2.6.31.5-127.fc12.x86_64 #1 SMP Sat Nov 7 21:11:14 EST
2009 x86_64 x86_64 x86_64 GNU/Linux
URL: svn://gcc.gnu.org/svn/gcc/trunk
Revision: 150327 or higher
gcc version 4.5.0 20090801 (experimental) (GCC)
I'll attach a reproducer.
g++ -c -std=c++0x list_sort_bind.cpp
...
include/c++/4.5.0/bits/list.tcc:392:3: error: cannot bind 'std::list<int>'
lvalue to 'std::list<int>&&'
...
It works without -std=c++0x.
svn rev. 150326 works, 150327 does not.
The critical svn revision was:
% svn log -v -c150327
------------------------------------------------------------------------
r150327 | jason | 2009-07-31 19:26:42 -0700 (Fri, 31 Jul 2009) | 16 lines
Changed paths:
M /trunk/gcc/cp/ChangeLog
M /trunk/gcc/cp/call.c
M /trunk/gcc/cp/cp-tree.h
M /trunk/gcc/cp/typeck.c
M /trunk/gcc/testsuite/ChangeLog
M /trunk/gcc/testsuite/g++.dg/cpp0x/initlist22.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/named.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/overload.C
A /trunk/gcc/testsuite/g++.dg/cpp0x/overloadn.C (from
/trunk/gcc/testsuite/g++.dg/cpp0x/overload.C:150326)
A /trunk/gcc/testsuite/g++.dg/cpp0x/rv-cast.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv1n.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv1p.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv2n.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv2p.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv3n.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv3p.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv4n.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv4p.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv5n.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv5p.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv6n.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv6p.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv7n.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv7p.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/rv8p.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/template_deduction.C
M /trunk/gcc/testsuite/g++.dg/cpp0x/unnamed_refs.C
M /trunk/libstdc++-v3/ChangeLog
M /trunk/libstdc++-v3/include/bits/move.h
M /trunk/libstdc++-v3/include/std/istream
M /trunk/libstdc++-v3/include/std/ostream
A /trunk/libstdc++-v3/testsuite/27_io/rvalue_streams.cc
* call.c (convert_class_to_reference): Binding an lvalue to an
rvalue reference is bad. If the user-defined conversion is bad,
set bad_p before merging conversions.
(maybe_handle_ref_bind): Don't push down bad_p.
(reference_binding): Binding an lvalue to an rvalue reference is bad.
(convert_like_real): Give a helpful error about binding lvalue
to rvalue reference.
(reference_related_p): No longer static.
* typeck.c (build_typed_address): New.
(build_static_cast_1): Add static_cast from lvalue to &&.
* cp-tree.h: Adjust.
* include/bits/move.h (forward): Implement as in N2835.
(move): Implement as in N2831.
* include/std/istream (rvalue stream operator>>): New.
* include/std/ostream (rvalue stream operator<<): New.
------------------------------------------------------------------------
--
Summary: -std=c++0x reference binding problem
Product: gcc
Version: 4.5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rwgk at yahoo dot com
GCC build triplet: x86_64-unknown-linux-gnu
GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42352