Учитывая следующий код:
// 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 иметь оператор присваивания перемещения по умолчанию с явно объявленным?