Solution -- explicit bonus
class manager : public employee { public: manager* bonus(int n) { sal += n; return this; } };
Invariant -- restored
k + n == ((m->salary(k))->bonus(n))->salary()
class manager : public employee { public: manager* bonus(int n) { sal += n; return this; } };
k + n == ((m->salary(k))->bonus(n))->salary()