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 emitidosParece 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?