错误"在'>'之前预期的主要表达是什么?令牌"在这种情况下意味着什么?

时间:2016-06-06 13:41:55

标签: templates c++11 g++

以下代码(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中的错误吗?有解决方法吗?

1 个答案:

答案 0 :(得分:1)

由于specific是从属名称,因此您需要template关键字:

It::template specific<Me>();
//--^^^^^^^^