嵌套模板类语法错误(MSVC)

时间:2014-05-27 17:04:00

标签: c++ templates visual-c++

我正在使用Visual Studio 2013,并且在函数返回模板外部类中的嵌套模板类时出现了一些问题。我做了一个最小的例子,真正的例子涉及更多的代码:

template<typename R, typename... S>
class Foo
{
public:
    template<typename T>
    class Bar
    {

    };
};

template<typename T, typename R, typename... S>
typename Foo<R, S...>::Bar<T> fooBar() { // <--- LINE 33

}

这会产生一整套错误(主要来自后续代码):

  • 33:错误C2988:无法识别的模板声明/定义
  • 33:错误C2059:语法错误:&#39;&lt;&#39;

它也会影响后续代码,之后所有行都会出现大量的语法错误。

我没有看到某些东西或者这可能是Visual Studio的问题吗?

1 个答案:

答案 0 :(得分:4)

问题/解决方案

在此上下文中,您需要使用关键字template来告诉编译器Bar确实是一个模板,如下面的代码段所示:

template<typename T, typename R, typename... S>
typename Foo<R, S...>::template Bar<T> fooBar() { // <--- LINE 33
   ...
}

但是为什么?

每当模板名称依赖模板名称时,我们都需要使用template关键字,如果没有它,编译器将会处理BarFoo<R, S...>::Bar中作为非模板,这是没有意义的;它错了。

进一步阅读: