Подтвердить что ты не робот

Move Constructor - недопустимый тип для конструктора, установленного по умолчанию VS 2013

Я читал о конструкторе перемещения, и я сделал этот код в VS 2013...

class Student
{
    unique_ptr<string> pName_;

public:
    Student(string name) : pName_(new string(name)) { }
    ~Student() { }
    Student(Student&&) = default;  // Here I get the error.
    void printStudentName(void) { cout << *pName_ << endl; }
};

int main(void)
{
    vector<Student> persons;

    Student p = Student("Nishith");
    persons.push_back(std::move(p));
    persons.front().printStudentName();

    return 0;
}

Я получаю "Student::Student(Student&& ): не является специальной функцией-членом, которую можно использовать по умолчанию", когда я пытался ее скомпилировать...

Может кто-нибудь объяснить мне, почему я получаю эту ошибку?

4b9b3361

Ответ 1

Поскольку компилятор VS2013 не поддерживает конструкторы перемещения по умолчанию.

Обратите внимание на следующее примечание от MSDN:

Visual Studio не поддерживает конструкторы перемещения по умолчанию или операторы переадресации как стандартные мандаты С++ 11. Для большего информации, см. раздел "По умолчанию" и "Удаленные" Поддержка возможностей С++ 11 (современный С++).