// barton_nackman.C
// ----------------------------------------------------------------
// COMP 290-001: Algorithm Library Design, Lutz Kettner, 02/28/2000
// Barton-Nackman trick: inject derived class as template argument 
// into base class.

#include <assert.h>

template <class T>
class Inequality {
public:
    bool operator != (const T& t) const {
        return ! (static_cast<const T&>(*this) == t);
    }
};

class A : public Inequality<A> {
    int i;
public:
    A( int j) : i(j) {}
    bool operator == (const A& a) const { i == a.i; }
};

int main() {
    A a(1);
    A b(2);
    assert( a != b); 
}

// EOF //

