这个错误很难解释,但它来自使用静态多态性有点极端。
请参阅以下代码。在代码中,如果我从模板化类派生模板化类,然后使用具有多个模板参数的模板化函数,我会得到一个不太有用的编译错误
error: invalid operands of types '<unresolved overloaded function type>' and 'bool' to binary 'operator<'
如果派生类本身没有模板化,奇怪的是,或者模板化函数只有一个模板参数时,不会发生此问题。我完全被难住了,所以任何帮助将不胜感激。我在 Fedora 7 上使用 gcc 4.7.2。
template <class Derived>
class BasicTemplate
{
protected:
template<bool param1, int param2, typename Param3>
void templatizedFunction(const Param3 & input)
{
}
};
template <class C>
class DerivedTemplate : public BasicTemplate<DerivedTemplate<C> >
{
using Base = BasicTemplate<DerivedTemplate<C> >;
public:
template <bool param1, int param2, typename Param3>
void templatizedFunction(const Param3 & input)
{
Base::templatizedFunction<param1, param2>(input);
}
C myData_;
};
class DerivedNonTemplate : public BasicTemplate<DerivedNonTemplate>
{
using Base = BasicTemplate<DerivedNonTemplate>;
public:
template <bool param1, int param2, typename Param3>
void templatizedFunction(const Param3 & input)
{
Base::templatizedFunction<param1, param2>(input);
}
};
int main()
{
DerivedTemplate<int> derivedTemplate;
DerivedNonTemplate derivedNonTemplate;
derivedTemplate.templatizedFunction<false, 1>(1);
derivedNonTemplate.templatizedFunction<false, 1>(1);
return 0;
}