EBO на самом деле не оптимизация (по крайней мере, не та, которую вы делаете в коде). Все дело в том, что пустой класс имеет ненулевой размер, но при выводе или выводе он может иметь нулевой размер.
Это самый обычный результат:
class A { };
class B { };
class C { };
class D : C { };
#include <iostream>
using namespace std;
int main()
{
cout << "sizeof(A) + sizeof(B) == " << sizeof(A)+sizeof(B) << endl;
cout << "sizeof(D) == " << sizeof(D) << endl;
return 0;
}
Выход:
sizeof(A) + sizeof(B) == 2
sizeof(D) == 1
Для редактирования:
Оптимизация заключается в том, что если вы действительно производите (например, от функтора или от класса, который имеет только статические члены), размер вашего класса (который является производным) не увеличится на 1 (или, скорее всего, на 4 8 из-за байтов заполнения).