/ / MSVC не вдається перезавантажити унікальний_ptr - c + +, c + + 11

MSVC не підтримує унікальний_pptr - c + +, c + + 11

На 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 відсутній, але повідомлення про помилку сприйняло мене досить, щоб опублікувати це питання, тому я його оновлював, тому кожен, хто схоже плутає, має найкращі шанси знайти відповідь.

Відповіді:

7 для відповіді № 1

Ваша помилка не має нічого спільного з переміщенням вгору або вниз. Ви намагаєтеся скопіювати ptr, що не допускається. Якщо ви пройдете std::move(ptr), трансляція буде неявним і автоматичним, як звичайний покажчик.