friend関数をクラススコープ内で定義する手法が Barton-Nackmand trick(もしくはBarton and Nackman trick)と呼ばれている 以下がその例である template <class T> class equal_comparable { // Tクラスの==演算子を使って!=演算子を定義 friend bool operator!=(const T& lhs, const T& rhs) { return !lhs.operator==(rhs); } }; class hoge : private equal_comparable<hoge> { int id_; public: explicit hoge(int id) : id_(id) {} bool operator==(const hoge& rhs) const { return id