Размер класса с пустым массивом в С++

AFAIK, sizeof не должен возвращать 0, но следующая программа:

#include <iostream>

class A {
public:
    int a[0];
};

int main() {
   A obj;
   std::cout << sizeof(obj) << std::endl;
}

выводит 0. Почему?

Ответ 1

С++ не разрешает массивы нулевого размера. Соответствующий компилятор отклоняет код, например:

$ g++-4.8 -pedantic-errors main.cpp
main.cpp:5:14: error: ISO C++ forbids zero-size array 'a' [-Wpedantic]
       int a[0];
              ^

Таким образом, поведение sizeof здесь просто не имеет значения. GCC позволяет использовать его (без -pedantic) в качестве расширения компилятора.