[Bug c++/50929] New: [C++0x] Wrong function selected for overload with template and rvalue reference
jarrydb at cse dot unsw.edu.au
gcc-bugzilla@gcc.gnu.org
Mon Oct 31 05:42:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50929
Bug #: 50929
Summary: [C++0x] Wrong function selected for overload with
template and rvalue reference
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: jarrydb@cse.unsw.edu.au
When choosing between a constructor
A(const A& a)
and
template <typename T>
A(T&& t)
given an object of type A&, the compiler chooses the second function. For the
following code:
class A
{
public:
A() : value(0) {}
A(const A& rhs) : value(1) { }
A(A&& rhs) : value(2) { }
template <typename T>
A(T&& t) : value(3) { }
int value;
};
int main()
{
A a;
A b = a;
return b.value;
}
compiled with:
g++ -std=gnu++0x rvalue_deduction.cpp
then running:
./a.out
echo $?
the output is
3
I expect the output to be 1, not 3.
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/home/jarrydb/current/soft/install-latest/libexec/gcc/x86_64-unknown-linux-gnu/4.7.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: /home/jarrydb/current/soft/src/gcc-git/configure
--prefix=/home/jarrydb/current/soft/install-latest --disable-multilib
--enable-languages=c,c++
Thread model: posix
gcc version 4.7.0 20111027 (experimental) (GCC)
More information about the Gcc-bugs
mailing list