Overload resolution and copy constructors that take non-const references
Hi,
Should the following compile, and what should it print?
#include <memory>
#include <iostream>
void foo(std::auto_ptr<int> x)
{
std::cout<<"copy"<<std::endl;
}
struct dummy
{
dummy(std::auto_ptr<int> const&)
{}
};
void foo(dummy x)
{
std::cout<<"dummy const ref"<<std::endl;
}
int main()
{
std::auto_ptr<int> const x(new int);
foo(x);
}
MSVC 9.0 and g++ 4.3 disagree.
MSVC compiles it and prints "dummy const ref", which is what I expected.
g++ refuses to compile it, saying that:
test_copy.cpp: In function 'int main()':
test_copy.cpp:23: error: passing 'const std::auto_ptr<int>' as 'this' argument o
f 'std::auto_ptr<_Tp>::operator std::auto_ptr_ref<_Tp1>() [with _Tp1 = int, _Tp
= int]' discards qualifiers
test_copy.cpp:23: error: initializing argument 1 of 'void foo(std::auto_ptr<in
t>)'
implying that it chose the first overload of foo.
Anthony
--
Anthony Williams | Just Software Solutions Ltd
Custom Software Development | http://www.justsoftwaresolutions.co.uk
Registered in England, Company Number 5478976.
Registered Office: 15 Carrallack Mews, St Just, Cornwall, TR19 7UL