template< class T > // requires T::value() class P { public: P(T& r) : t(r) {} int operator==( P& p) { return t.value() == p.t.value(); } private: T& t; }; slide: Type abstraction in C++