Обычно, когда я стираю элемент из набора, я хочу утверждать, что это было на самом деле стерта: т.е.утверждают возвращаемого значения, но работать в любом случае
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));
Существуют ли какие-либо недостатки в этом? Мне кажется более простым, чем решение luiscubal.
, какой компилятор? –
Я использую g ++. Но это то, что должен делать хороший компилятор, верно? – dspyz
Многие компиляторы предоставляют функцию 'verify()' function/macro, которая делает то, что вы хотите. –