How is an empty class and an empty struct compiled?

c++, clang, compiler-construction, gcc, visual-c++

Solution

It does in a way, it says that it has to allocate space for it unless certain cases when its used as a base class (known as Empty Base Class Optimization). This is to guarantee that different objects have different addresses.

They are compiled the same given that `struct` and `class` are the same thing, except for the default access specifier. In C++11 the notion of standard-layout classes/structs is introduced, and guarantees that the memory layout for empty classes to be the same.

Problem

Does the C++ standard dictate the compilation layout of the class and struct? How are they compiled differently especially if they are empty?

Original source

Related problems