Ага, щас.
Заменяем (так быстрее, чем union редактировать):
Код
#define POOL_PLACE(class) class a_##class
Получаем кучу в духе:
Код
pn.cpp:31: error: member ‘A pool1_member_sizes::a_A’ with constructor not allowed in union
Цитата(brag @ Jun 24 2012, 12:10)

И ручное выравнивание можно убрать и на 8-/16битных юзать вместо uint32_t соответствующій тип.
Да кто его знает...
Вот вдруг «захочется» на CM3 ровнять такие пулы на двойное слово, uint64_t.
А sizeof даст в байтах округлённое вверх до uint32_t.
И у какого-то класса будет их (uint32_t) нечётное количество.
И даст sizeof(отой_union)/sizeof(uint64_t) отбрасывание «лишнего» uint32_t и нехватку места в буфере.
Мне проще каждый раз вместо A/B написать (A+B-1)/B чем думать, где отсутствие округления вверх может вілезти боком.
Лишней памяти такая запись точно никогда не запросит, нехватки тоже гарантированно не будет, в отличие от A/B.