开发者

Cannot refer to a template name nested in a template parameter

开发者 https://www.devze.com 2022-12-30 13:29 出处:网络
I have the following code: template <typename Provider> inline void use() { typedef Provider::Data<int> D;

I have the following code:

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

Where I'm basically trying to use a template class member 'Data' of some 'Provider' class, applied to 'int', but I get the following errors:

util.cpp:5: error: expected init-declarator before '<'开发者_开发百科 token
util.cpp:5: error: expected `,' or `;' before '<' token

I'm using GCC 4.3.3 on a Solaris System.


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

The problem is that, when the compilers parses use() for the first time, it doesn't know Provider, so it doesn't know what Provider::Data refers to. It could be a static data member, the name of a member function or something else. That's why you have to put the typename in.
The additional template is necessary whenever the nested name is the name of a template. If it was something else, then Data < ... could be a comparison.


You need a typename and a template:

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

精彩评论

暂无评论...
验证码 换一张
取 消