У нас есть следующий метод проверки, является ли наша структура POD или нет. Он всегда возвращает значение:Почему структура с создателем удаленной копии не является типом POD?
bool podTest() {
struct podTest {
int count;
int x[];
};
return std::is_pod<podTest>::value; //Always returns true
}
Пока все хорошо. Теперь мы делаем одно изменение и удаляем конструктор копии:
bool podTest() {
struct podTest {
podTest(const podTest&) = delete;
int count;
int x[];
};
return std::is_pod<podTest>::value; //Always returns false
}
Это всегда возвращает false. Прочитав определение is_pod
, я все еще пытаюсь понять, какое требование оно нарушает. Что мне не хватает?
Это составляется на godbolt с использованием GCC 6.1, с -std=c++14
Угадайте, потому что вы говорите, что структура не может быть скопирована, но одно из качеств типов POD заключается в том, что они всегда можно копировать. –
@NeilButterworth: Одно из требований типов POD заключается в том, что они тривиально ** копируются. – IInspectable
Как ни странно, 'std :: is_trivially_copyable :: value' возвращает true, поэтому должно быть какое-то другое нарушение требований POD. Конечно, 'int x [];' следует удалить. Если я не ошибаюсь, гибкие границы массива не являются частью C++ 14. –
IInspectable