Учитывая cppreference и текущий c++ рабочий проект, класс тривиально можно копировать, если:
- Каждый конструктор копирования тривиально или удален
- Каждый конструктор перемещения тривиален или удален
- Каждый оператор присваивания экземпляра тривиально или удален
- Каждый оператор назначения перемещения тривиален или удален
- по крайней мере, один конструктор копирования, конструктор перемещения, оператор присваивания копии или оператор присваивания перемещения не удаляются
-
Тривиальный не удаленный деструктор
Поэтому я придумал этот пример кода:
#include <type_traits>
struct non_trivially_copyable {
non_trivially_copyable(non_trivially_copyable const&) = delete;
non_trivially_copyable& operator=(non_trivially_copyable const&) = delete;
non_trivially_copyable(non_trivially_copyable &&) = delete;
non_trivially_copyable& operator=(non_trivially_copyable &&) = delete;
};
int main()
{
return std::is_trivially_copyable<non_trivially_copyable>::value;
}
Мой класс не удовлетворяет требованию номер 5. Тем не менее он дает мне результат, который мой класс non_trivially_copyable
тривиально можно копировать. Я тестировал его на некоторых онлайн-компиляторах:
- https://godbolt.org/g/9s4fr9
- https://wandbox.org/permlink/sEJYdi5aIDMzsjGY
- https://onlinegdb.com/SyFyTBrx7
- http://coliru.stacked-crooked.com/a/93b6ea4d202092a6
Я сомневаюсь, что все реализации ошибочны; так почему я получаю этот результат?