无法引用嵌套在模板参数中的模板名称

时间:2010-05-18 19:25:46

标签: c++

我有以下代码:

template <typename Provider>
inline void use()
{
    typedef Provider::Data<int> D;
}

我基本上试图使用某些'Provider'类的模板类成员'Data',应用于'int',但是我得到以下错误:

util.cpp:5: error: expected init-declarator before '<' token
util.cpp:5: error: expected `,' or `;' before '<' token

我在Solaris系统上使用GCC 4.3.3。

2 个答案:

答案 0 :(得分:16)

typedef typename Provider::template Data<int> D;

问题在于,当编译器第一次解析use()时,它不知道Provider,因此它不知道Provider::Data指的是什么。它可以是静态数据成员,成员函数的名称或其他内容。这就是你必须把typename放进去的原因 只要嵌套名称是模板的名称,就需要额外的template。如果是其他内容,那么Data < ...可能是一个比较。

答案 1 :(得分:8)

您需要typenametemplate

template <typename Provider>
inline void use()
{
    typedef typename Provider::template Data<int> D;
}