// 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_; }
};