typedef一个专门的嵌套模板

时间:2016-05-19 17:09:30

标签: c++ templates nested typedef

我正在尝试编译一些旧的C ++代码,这些代码似乎不再是有效的C ++(VS2008到VS2015)。我已经设法将问题缩小到看起来像这样的东西。

class Any { };

class Parent
{
  template < typename anyT>
  class Child { };
};

template< typename parentT >
class Fail
{
  typedef typename parentT::Child<Any>   ChildT;       // 2 errors
  typename ChildT _child;                              // 2 errors
};

我从Visual Studio 2015中收到此编译器错误。

Error   C2059   syntax error: '<'   TemplateTest    d:\programming\templatetest\example.h   12
Error   C2238   unexpected token(s) preceding ';'   TemplateTest    d:\programming\templatetest\example.h   12
Error   C3646   '_child': unknown override specifier    TemplateTest    d:\programming\templatetest\example.h   13
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    TemplateTest    d:\programming\templatetest\example.h   13  

1 个答案:

答案 0 :(得分:0)

Where and why do I have to put the “template” and “typename” keywords?

typedef typename parentT::template Child<Any>   ChildT;
ChildT _child;