class counter { 
counter
public: counter(int n = 0) : _n(n) { require( n >= 0 ); promise( invariant() ); // check initial state } virtual void operator++() { require( true ); // empty pre-condition hold(); // save the previous state _n += 1; promise( _n == old_n + 1 && invariant() ); } int value() const { return _n; } // no side effects virtual bool invariant() { return value() >= 0; } protected: int _n; int old_n; virtual void hold() { old_n = n; } };

slide: The counter contract