Formas de ASERTAR expresiones en tiempo de construcción en C

Estoy ordenando un código antiguo que usa 'números mágicos' por todos lados para establecer registros de hardware, y me gustaría usar constantes en lugar de estos números para hacer que el código sea un poco más expresivo (de hecho, se asignarán a los nombres) / valores utilizados para documentar los registros).

Sin embargo, me preocupa que con el volumen de cambios pueda romper los números mágicos. Aquí hay un ejemplo simplificado (el conjunto de registros es más complejo):

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

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

así que en lugar de

set_register(5);

tenemos:

set_register(state1|mode1);

Lo que busco es unTiempo de construcción versión de:

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

Actualizar

@Christian, gracias por la rápida respuesta, también me interesa la respuesta del entorno C / non-boost porque se trata de un código de controlador / kernel.

Respuestas a la pregunta(10)

Su respuesta a la pregunta