Существует старое сообщение с просьбой построить конструкцию, для которой sizeof
вернет 0
. Есть несколько высокоуровневых ответов от пользователей высокой репутации, говорящих, что по стандарту ни один тип или переменная не может иметь sizeof 0. И я согласен на 100% с этим.
Однако есть этот новый ответ, в котором представлено это решение:
struct ZeroMemory {
int *a[0];
};
Я собирался проголосовать и прокомментировать это, но время, проведенное здесь, научило меня проверять даже то, на что я на 100% уверен. Поэтому... к моему удивлению, оба gcc
и clang
показывают те же результаты: sizeof(ZeroMemory) == 0
. Более того, sizeof переменной 0
:
ZeroMemory z{};
static_assert(sizeof(z) == 0); // Awkward...
Whaaaat...?
Как это возможно?