奇怪的重复模板模式:在gcc7中编译错误,但在gcc6中确定

时间:2018-06-04 08:39:09

标签: c++ gcc crtp

我正在编写小型矩阵库,它使用奇怪的重复模板模式,我面临以下问题。

必须上课BaseDerived。 Derived具有模板参数,表示某些标量类型。我想在Base中创建cast方法,它将类似Derived的类转换为Derived-like和另一个标量。

以下代码看起来很好,但在gcc 7.2.0

中引发了编译错误
template<typename Derived>
class Base
{
    public:
    template<typename OtherT>
    auto cast() const 
    {
        return (static_cast<Derived*>(this))->cast<OtherT>();
    }    
};

template<typename T>
class Derived : public Base<Derived<T>>
{
public:
    template<typename OtherT>
    Derived<OtherT> cast() const
    {
        return Derived<OtherT>();
    }
};



int main()
{
    Derived<float>  der;
    return 0;
}

错误讯息:

a.cpp:14:51: error: expected primary-expression before ‘>’ token
  return (static_cast<Derived*>(this))->cast<OtherT>();
                                                   ^
a.cpp:14:53: error: expected primary-expression before ‘)’ token
  return (static_cast<Derived*>(this))->cast<OtherT>();

但是使用gcc 6.4.0一切正常

有没有办法解决它?

PS抱歉我的英语不好。

0 个答案:

没有答案