In genere, quando mi cancellerò un elemento da un insieme, voglio affermare che in realtà è stato cancellato: cioèassert ritorno valore, ma in entrambi i casi eseguire
assert(s.erase(e));
ma poi l'elemento non ottiene cancellato quando viene impostato NDEBUG. Ma se scrivo
bool removed = s.erase(e);
assert(removed);
il compilatore si lamenta che "rimosso" non è utilizzato quando viene impostato NDEBUG.
Come posso fare questo giusto?
ho finito solo la creazione di un metodo di utilità:
inline void run_and_assert(bool b) {
assert(b);
}
Ora posso dire
run_and_assert(s.erase(e));
Ci sono degli svantaggi a questo? Mi sembra più semplice della soluzione di Luiscubal
quale compilatore? –
Sto usando g ++. Ma è quello che dovrebbe fare un buon compilatore, giusto? – dspyz
Molti compilatori forniscono una funzione/macro 'verify()' che fa ciò che volete. –