错误:期望的主表达式在' ..'令牌



我在gcc 10.3上得到这个编译错误:

<source>:15:22: error: expected primary-expression before '...' token
15 |     void g() { a.f<Cs...>();}
|                      ^~~
<source>:15:22: error: expected ';' before '...' token
15 |     void g() { a.f<Cs...>();}
|                      ^~~
|                      ;

原来clang实际上告诉你哪里出错了:

<source>:15:18: error: use 'template' keyword to treat 'f' as a dependent template name
void g() { a.f<Cs...>();}
^
template 

这里有一个最小可复制的例子:

template<typename ...Ts>
class A{
public:
template<typename ...Cs>
void f() {}
};
template<typename ...Ts>
class B{
public:
template<typename ...Cs>
void g() { a.f<Cs...>();}
private : 
A<Ts...> a;
};

解决方案是使用use 'template'关键字将'f'视为依赖模板名,如下所示:

template<typename ...Cs>
void g() { a.template f<Cs...>();}

最新更新