Pad uma estrutura C + + para uma potência de dois

Eu estou trabalhando em algum código C ++ para um sistema embarcado. A interface de E / S que o código usa requer que o tamanho de cada mensagem (em bytes) seja uma potência de dois. Agora, o código faz algo assim (em vários lugares):

#pragma pack(1)
struct Message
{
   struct internal_
   {
      unsigned long member1;
      unsigned long member2;
      unsigned long member3;
      /* more members */
   } internal;
   char pad[64-sizeof(internal_)];
};
#pragma pack()

Eu estou tentando compilar o código em um Fedora de 64 bits pela primeira vez, ondelong é de 64 bits. Nesse caso,sizeof(internal_) é maior que 64, a expressão de tamanho da matriz sofre o underflow e o compilador reclama que a matriz é muito grande.

Idealmente, gostaria de poder escrever uma macro que tomará o tamanho da estrutura e avaliará em tempo de compilação o tamanho necessário da matriz de preenchimento para arredondar o tamanho da estrutura para uma potência de dois.

Eu olhei para oBit Twins Hacks página, mas eu não sei se alguma das técnicas lá realmente pode ser implementada em uma macro para ser avaliada em tempo de compilação.

Alguma outra solução para este problema? Ou devo perpetuar o problema e apenas mudar o mágico 64 para um mágico 128?

questionAnswers(11)

yourAnswerToTheQuestion