1

这个错误很难解释,但它来自使用静态多态性有点极端。

请参阅以下代码。在代码中,如果我从模板化类派生模板化类,然后使用具有多个模板参数的模板化函数,我会得到一个不太有用的编译错误

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;
}
4

0 回答 0