次のコードは、MSVC11 で失敗し、エラーが発生します
cannot convert parameter 1 from 'std::unique_ptr<DerivedClass>' to 'std::unique_ptr<BaseClass>'
コード:
class BaseClass
{ };
class DerivedClass : public BaseClass
{ };
void MyFunction(std::unique_ptr<BaseClass> obj)
{ };
int main()
{
auto ptr = std::unique_ptr<DerivedClass>(new DerivedClass);
MyFunction(ptr); // fails, with error about cannot convert type
// MyFunction(std::move(ptr)); // This will work
}
回答で指摘されているように、理由はstd::move
ありませんが、エラーメッセージで質問を投稿するのに十分混乱したので、同様に混乱している人が回答を見つける可能性が最も高いように更新しました。