Обычно, когда я стираю элемент из набора, я хочу утверждать, что он действительно был удален: т.е.
assert(s.erase(e));
но тогда элемент не удаляется при установке NDEBUG. Но если я напишу
bool removed = s.erase(e);
assert(removed);
компилятор жалуется, что «удалено» не используется, когда установлен NDEBUG.
Как я могу это сделать правильно?
В итоге я просто создал служебный метод:
inline void run_and_assert(bool b) {
assert(b);
}
теперь я могу сказать
run_and_assert(s.erase(e));
Есть ли у этого недостатки? Мне это кажется проще, чем решение Луискубала
verify()
функцию / макрос, которые делают то, что вы хотите. - person Jonathan Wood   schedule 18.12.2013