Любая причина использовать утверждение времени выполнения вместо утверждения времени компиляции?
Просматривая кодовую базу Visual C ++, я обнаружил следующую странную вещь. Утверждение времени выполнения (котороепроверить условие и выдать исключение, если условие нарушено) использовался в случае, когда условие могло быть оценено во время компиляции:
assert( sizeof( SomeType ) == sizeof( SomeOtherType ) );
ясно, что компилятор оценит условие и заменит код, который будет эффективно
assert( true );
который ничего не делает или
assert( false );
который выдает исключение каждый раз, когда управление проходит через эту строку.
IMO Утверждение времени компиляции следует использовать вместо этого по следующим причинам:
это выявляет нарушение условия раньше - во время компиляции - иэто позволило бы очистить (таким образом, быстрее и меньше) машинный кодПохоже, что утверждение времени компиляции - единственно правильная вещь. Есть ли какая-либо возможная причина, чтобы предпочесть здесь утверждение во время выполнения?