Listing 1

// Listing1.h: helper base class
template <class D> class Helper
{
    friend D operator+(D const& lhs, D const& rhs)
    { D tmp = lhs; tmp += rhs; return tmp; }

    friend bool operator>=(D const& lhs, D const& rhs)
    { return !(lhs < rhs); }
};
class D : public Helper<D>
{
    int rep_;
public:
    D(int i=0) : rep_(i) {/*empty*/}

    D& operator+=(D const& rhs)
    { rep_ += rhs.rep_; return *this; }

    bool operator<(D const& rhs) const
    { return rep_ < rhs.rep_; }
};