¿Alguna razón para usar una afirmación en tiempo de ejecución en lugar de una afirmación en tiempo de compilación?

Mientras revisaba la base de código de Visual C ++, encontré algo extraño a continuación. Una afirmación en tiempo de ejecución (que esverificar la condición y lanzar una excepción si se viola la condición) se utilizó en un caso en el que la condición podría evaluarse en tiempo de compilación:

assert( sizeof( SomeType ) == sizeof( SomeOtherType ) );

claramente el compilador evaluará la condición y reemplazará el código que efectivamente será

assert( true );

que no hace nada o

assert( false );

que produce una excepción cada vez que el control pasa por esa línea.

En mi opinión, una afirmación en tiempo de compilación debería haberse utilizado en su lugar por las siguientes razones:

expondría la violación de la condición antes, en tiempo de compilación, ypermitiría emitir un código de máquina más limpio (por lo tanto, más rápido y más pequeño)

Parece que una afirmación en tiempo de compilación es lo único correcto. ¿Hay alguna razón posible para preferir una afirmación de tiempo de ejecución aquí?

Respuestas a la pregunta(2)

Su respuesta a la pregunta