Мне просто интересно ... Предположим, у меня есть структура POD на C++. Если бы я поставил static_assert
там, это испортит факт, что это POD?Будет ли static_assert в POD разрушать POD?
Я знаю, что могу легко поместить его где-то еще, я просто спрашиваю, потому что мне интересно, если я должен или не должен делать это ...
Другими словами (более конкретные):
#include <iostream>
#include <type_traits>
struct A
{
void* ptr;
static_assert(sizeof(void*) == 8, "Pointer should have size 8; platform unsupported");
};
int main()
{
// Is it guaranteed that this will evaluate to 'true'?
std::cout << std::is_pod<A>::value << std::endl;
}
Я считаю, что нет, 'static_assert' умирает на время компиляции, я не думаю, что это даже включено в результате двоичном .. У меня нет стандарта рядом со мной, чтобы получить точный ответ –
я думаю' станд :: is_pod' действительно не может быть ошибкой. – Quentin
@DavidHaim Конечно, это точка 'static_assert'. По-прежнему afaik не определяется, как его реализовать, поэтому, если он будет генерировать виртуальный член для выполнения своей работы, он теоретически может испортить 'is_pod'. (Не то, чтобы я мог понять, почему это так, но это еще одна история ...) Правильно? – atlaste