Algum motivo para usar uma declaração em tempo de execução em vez da declaração em tempo de compilação?

Ao revisar a base de código do Visual C ++, encontrei uma coisa estranha a seguir. Uma declaração em tempo de execução (que éverifique a condição e lance uma exceção se a condição for violada) foi usado em um caso em que a condição pudesse ser avaliada em tempo de compilação:

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

claramente o compilador avaliará a condição e substituirá o código que será efetivamente

assert( true );

que não faz nada ou

assert( false );

que lança uma exceção sempre que o controle passa por essa linha.

Na IMO, uma declaração em tempo de compilação deveria ter sido usada pelos seguintes motivos:

exporia a violação da condição anteriormente - em tempo de compilação - epermitiria que códigos de máquina mais limpos (mais rápidos e menores) fossem emitidos

Parece que uma afirmação em tempo de compilação é a única coisa certa. Existe algum motivo possível para preferir uma declaração em tempo de execução aqui?

questionAnswers(2)

yourAnswerToTheQuestion