模板类中的静态功能:GCC与VS

static function in template class: gcc vs VS

本文关键字:GCC VS 功能 静态      更新时间:2023-10-16

以下C 代码编译并与Visual Studio 2017一起使用,但使用GCC 5.0提出了错误的"预期初级表达"。知道为什么吗?描述是一个结构,描述:: add是函数模板。

template <class X>
struct DataPoint
{
    X value;
    DataPoint()
    : value(0.) {}
    DataPoint( X value )
    : value(value) {}
    static void describe(Description< DataPoint<X> > & desc)
    {
        desc.add<X>("f", ".", offsetof(DataPoint<X>, value));
    }
}

实际上,当未指定数据关注点模板类型时,VS甚至都不抱怨:

static void describe(Description<DataPoint> & desc)
{
    desc.add<X>("f", ".", offsetof(DataPoint, value));
}

您的代码不是标准的C 。desc.add<X>中的add是一个因名称,因此编译器不知道它是否是模板。Visual C 仍然无法实现整个两阶段查找,因此它可以通过它来进行。但是G (和clang等(要求您使用template关键字。

desc.template add<X>("f", ".", offsetof(DataPoint, value));