Formas de ASSERTAR expressões no momento da criação em C

Estou arrumando um código mais antigo que usa 'números mágicos' em todo o lugar para definir registros de hardware, e gostaria de usar constantes em vez desses números para tornar o código um pouco mais expressivo (na verdade, eles mapearão os nomes / valores usados ​​para documentar os registros).

No entanto, estou preocupado que com o volume de alterações eu possa quebrar os números mágicos. Aqui está um exemplo simplificado (o conjunto de registros é mais complexo):

const short mode0 = 0;
const short mode1 = 1;
const short mode2 = 2;

const short state0 = 0;
const short state1 = 4;
const short state2 = 8;

então ao invés de:

set_register(5);

temos:

set_register(state1|mode1);

O que estou procurando é umtempo de construção versão de:

ASSERT(5==(state1|mode1));

Atualizar

@Christian, obrigado pela resposta rápida, estou interessado em uma resposta do ambiente C / non-boost também porque este é o código do driver / kernel.

questionAnswers(10)

yourAnswerToTheQuestion