次の (部分的な) コードを検討してください。
class Group {
    private:
      int id;
    public:
      void set_id(int);
      int get_id();
      bool operator==(const Group&);
};
bool Group::operator==(const Group& g) {
    if(g.id == this->id) {  /* id is private? */
            return true;
    }
    return false;
}
コードがコンパイルされ、結果は適切に見えます。しかし、if演算子のオーバーロード実装の部分で、その引数のプライベートメンバー - に直接アクセスしていますが、そのconst Group& gようなアクセスは無効ではないでしょうか?