Normalerweise, wenn ich ein Element aus einem Satz zu löschen, möchte ich behaupten, dass es tatsächlich gelöscht wurde: dhassert Rückgabewert, sondern laufen in beide Richtungen
assert(s.erase(e));
aber dann ist das Element nicht erhalten gelöscht, wenn NDEBUG gesetzt ist. Aber wenn ich schreibe
bool removed = s.erase(e);
assert(removed);
der Compiler beschwert sich, dass ‚entfernt‘ wird nicht verwendet, wenn NDEBUG eingestellt ist.
Wie kann ich das richtig machen?
ich am Ende nur ein Dienstprogramm Methode zu erstellen:
inline void run_and_assert(bool b) {
assert(b);
}
jetzt kann ich sagen
run_and_assert(s.erase(e));
Gibt es irgendwelche Nachteile zu diesem? Es scheint einfacher zu sein als luiscubals Lösung
die Compiler? –
Ich benutze g ++. Aber das sollte ein guter Compiler machen, oder? – dspyz
Viele Compiler bieten eine Funktion 'verify()'/Makro, die das tut, was Sie wollen. –