Вы почти наверняка злоупотребляете утверждениями . Выражение утверждения никогда не должно иметь побочных эффектов .
Когда вы говорите assert(initialize_critical_space_technology());
, а затем пропускаете всю эту строку в сборке релиза, вы можете вообразить для себя, что произойдет.
Единственный безопасный и разумный способ использовать утверждения - это значения:
const bool space_init = initialize_critical_space_technology();
assert(space_init);
Некоторые люди вводят макрос VERIFY
для чего-то, что всегда выполняет код:
#define VERIFY(x) (x) // release
#define VERIFY(x) (assert(x)) // debug