Почему std::is_standard_layout_v> true?C++

Программы на C++. Форум разработчиков
Anonymous
Почему std::is_standard_layout_v> true?

Сообщение Anonymous »

Я пытался проверить, являются ли некоторые типы POD (на самом деле, чтобы посмотреть, смогу ли я поместить их в массив numpy), и, обнаружив, что std::is_pod устарел в C++20, решил попробовать альтернативу. Самым близким мне показался std::is_standard_layout, поэтому я попробовал его, но был очень удивлен, обнаружив, что std::is_standard_layout_v верен!
Затем я проверил еще несколько вещей, чтобы попытаться улучшить свое понимание:

Код: Выделить всё

struct Test {
double d;
};

struct Test2 : Test {
int i;
};

struct Test3 : Test {
int i;
Test3(unsigned u) {}
};
Я обобщил свои выводы ниже (Godbolt здесь):




std::is_trivy
std::is_pod
std::is_standard_layout



правда
верно
верно

Код: Выделить всё

struct Test
правда
верно
верно

Код: Выделить всё

struct Test2
истина
ложь
ложь

Код: Выделить всё

struct Test3
false
false
false

Код: Выделить всё

std::array
правда
верно
верно

Код: Выделить всё

std::vector
false
false
true

Код: Выделить всё

std::map
false
false
false



Может кто-нибудь объяснить, почему std::vector считается «стандартным макетом» и что мне следует использовать, чтобы проверить, является ли тип POD в С++20?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ouble-true

Вернуться в «C++»