class Foo
{
friend class SquirrelVM;
public:
Foo() { cout << "Ctor" << endl; }
virtual ~Foo() { cout << "Dtor" << endl; }
Foo(const Foo & o) { cout << "const Ctor" << endl; }
template <typename _ty>
Foo(const _ty & val) { cout << "T const Ref" << endl; }
template <typename _ty>
Foo(_ty & val) { cout << "T Ref" << endl; }
template <typename _ty>
Foo(_ty * val) { cout << "T Ptr" << endl; }
};
Foo CreateFoo()
{
Foo ret;
return ret;
}
int main( int argc, char* argv[] )
{
Foo f = CreateFoo();
return 0;
}
Выходы различаются между 2005 и 2010 годами.
Ожидаемые результаты, как это ..
Ctor
const Ctor
Dtor
Dtor
Приведенные выше результаты будут получены, если я соберу vs2005.
Но вывод vs2010 не совпадает с выводом vs2005
Ctor
T Ref
Dtor
Dtor
Почему приоритет функции шаблона выше, чем у обычной функции в vs2010?
[править]
Если const опущен в конструкторе копирования, то выдается ожидаемый результат (который аналогичен vs2005) Есть ли побочный эффект, если форма конструктора копирования не совпадает с рекомендованной формой? Рекомендуемая форма .. Я имею в виду ... Foo(const Foo&);
не Foo(Foo&);