以下代码(also on ideone):
// A type templated for different function call signatures.
template <typename Signature> class Used;
template <typename T_Ret, typename ...T_Args>
class Used<T_Ret(T_Args...)> {
public:
// A static method for a specific type.
template <typename T>
static void specific() { }
};
// Some class using the above.
template <typename T>
class User {
public:
// A method that must call the specific function of used.
template <typename T_Ret, typename ...T_Args>
void method() {
using It = Used<T_Ret(T_Args...)>;
using Me = T;
// error: expected primary-expression before '>' token
It::specific<Me>();
}
};
int main() {
User<int> user;
user.method<void, int>();
}
给出以下错误(至少使用GCC):
test.cpp: In member function 'void User<T>::method()':
test.cpp:20:18: error: expected primary-expression before '>' token
It::specific<Me>();
^
我不知道为什么......如果从Used
类中删除模板参数,则不会发生错误。
我做错了什么(即在某处丢失了模板或typename关键字)?这是GCC中的错误吗?有解决方法吗?
答案 0 :(得分:1)
由于specific
是从属名称,因此您需要template
关键字:
It::template specific<Me>();
//--^^^^^^^^