Может ли тип POD иметь оператор присваивания перемещения по умолчанию с явно объявленным? - PullRequest
4 голосов
/ 25 апреля 2019

Учитывая следующий код:

// in main.cpp
#include <type_traits>

struct A {
    A& operator=(const A&) = default;
    A& operator=(A&&) = default;
};

int main() {
    static_assert(std::is_pod<A>::value);
    return 0;
}

Вы можете видеть, что для struct A.

есть оператор назначения перемещения по умолчанию.

В msvc (VS2017) , при cl /std:c++17 main.cpp произошла ошибка статического подтверждения.

В g ++ (MinGW-W64, 8.1.0) , с g++ -std=c++17 main.cpp, ничего не пошло не так.

Однако, если я закомментирую A& operator=(A&&) = default;, в обоих компиляторах все в порядке.

Итак, может ли тип POD иметь оператор присваивания перемещения по умолчанию с явно объявленным?

...