Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板参数和运算符重载_C++_Templates_Operator Overloading - Fatal编程技术网

C++ 模板参数和运算符重载

C++ 模板参数和运算符重载,c++,templates,operator-overloading,C++,Templates,Operator Overloading,我想用模板参数重载模板类中的相等运算符。守则: template <typename TObj, template<typename T> class TDerived> class A; template <typename TObjL, template<typename T> class TDerivedL, typename TObjR, template<typename T> class TDerivedR> bool o

我想用模板参数重载模板类中的相等运算符。守则:

template <typename TObj, template<typename T> class TDerived>
class A;

template <typename TObjL, template<typename T> class TDerivedL, typename TObjR, template<typename T> class TDerivedR>
bool operator==(const A<TObjL, TDerivedL>& l, const A<TObjR, TDerivedR>& r)
{
    return true;
}

template <typename TObj, template<typename T> class TDerived>
class A
{
    template <typename TObjL, template<typename T> class TDerivedL, typename TObjR, template<typename T> class TDerivedR>
    friend bool operator==(const A<TObjL, TDerivedL>& l, const A<TObjR, TDerivedR>& r);
};

template <typename TObj>
class B: public A<TObj, B>
{
};

int main()
{
    B<int> b1, b2;
    b1==b2;
    return 0;
}
模板
甲级;
模板
布尔运算符==(常数A&l、常数A&r)
{
返回true;
}
模板
甲级
{
模板
友元布尔运算符==(常数A&l,常数A&r);
};
模板
B类:公共A
{
};
int main()
{
B b1,b2;
b1==b2;
返回0;
}

编译器拒绝编译此代码,这给了我一个错误:“operator==”的不明确重载。当我用类型参数替换所有模板参数时(例如,只保留
类TDerived
),没有错误。为什么会发生此错误?在此类类中重载运算符的正确方法是什么?

,我认为没有理由不编译此类。我们在这里讨论的是哪个编译器?@T.C.我使用的是gcc 4.8.2和3.4.2。那么,听起来像是一个gcc错误。