Проблема с таким предложением состоит в том, что они могут вызвать некоторые накладные расходы без предупреждения, особенно после некоторого рефакторинга.
Только содержимое / выражение внутри утверждения обычно полностью удаляется в сборках выпуска.
Если вы хотите использовать переменные в своем утверждении, вы можете использовать лямбды. См. Этот пример:
#include <cassert>
auto get_i(){
return 5;
}
int main(){
/* BAD
[[maybe_unused]] const auto i = get_i();
assert(i == 5);
*/
assert([&](){
const auto i = get_i();
return i == 5;
}());
}