use*_*875 4 c++ templates variadic c++11
我的问题是关于以下代码:
template <class...T>
class A
{
public:
template <class...S>
static void a() { }
};
template <class...T>
class B
{
public:
template <class...S>
void b()
{
A<T...>::a<S...>();
}
};
int main(int argc, char** argv)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我有一个A
具有可变参数模板的类,并包含一个a
具有另一个可变参数模板的静态方法.从其他地方(B
在本例中为类)我有两组不同的可变参数模板我想传递给它A::a
.
编译器(GCC 4.8.1)给出以下错误消息:
main.cpp: In static member function ‘static void B<T>::b()’:
main.cpp:16:22: error: expected primary-expression before ‘...’ token
A <T...>::a<S...>();
^
main.cpp:16:22: error: expected ‘;’ before ‘...’ token
Run Code Online (Sandbox Code Playgroud)
另请注意,当我将方法更改为b()
:
void b()
{
A<int, char, short>::a<S...>();
}
Run Code Online (Sandbox Code Playgroud)
或者A的模板的其他规范然后代码编译得很好.
上面的代码有什么问题?
在这里添加模板
A<T...>::template a<S...>();
Run Code Online (Sandbox Code Playgroud)
看到评论的原因.这也很好地在没有关键字的VC++上编译,所以我猜它是依赖于编译器的.