template <class T>
class A {
    struct B {
         T a,b;
    }
    B& operator+ (B & x, B & y) {
        return B(x.a + y.a, x.b + y.b);
    }    
    int funcA (B & x, B & y){
        return (x + y).a;
    }
};
ご想像のとおり、コンパイル中に「operator+ はゼロまたは 1 つの引数を取る必要があります」というメッセージが表示されます。右。operator+ では、「this」が最初の引数として渡されるためです。したがって、解決策は、クラス A 定義の外に演算子を配置することです。ただし、A の関数 funcA は operator+ を使用します。したがって、A の前に定義する必要があります。ただし、operator+ 自体は、テンプレート自体である A で定義されたクラス B を使用し、B は依存クラスです。
解決策は何ですか?