模板专用类中的模板专业化

时间:2016-02-17 17:20:07

标签: c++ templates specialization

以下在Visual Studio 2015中编译

template <int> struct Test;

template <> struct Test<0> {
    template <int> static void foo();
    template <> static void foo<0>() {}
    template <> static void foo<1>() {}
};

但GCC 5.2抱怨错误:template-id&#39; foo&lt; 0&gt;&#39;在主要模板的声明中   模板&lt;&gt; static void foo&lt; 0&gt;(){}

如何修复代码以便在两个编译器中编译?

2 个答案:

答案 0 :(得分:3)

template<int> struct Test;

template<> struct Test<0> {
    template<int> static void foo();

};

template<> void Test<0>::foo<0>() {}
template<> void Test<0>::foo<1>() {}

试试这个

答案 1 :(得分:1)

这应该适用于g ++和MSVC:

template <int>
struct Test;

template <>
struct Test<0>
{
  template <int>
  static void foo();
};
template <>
void Test<0>::foo<1>()
{
}

int main()
{
  Test<0>::foo<1>();
}