我正在为以下最小代码突出显示的一个奇怪问题而挠头:
struct A {
template <typename ...X, typename ...Y>
void f(X... a, Y...b) {
}
template <typename ...X>
void g(X...c) {
f<X...> (c...);
}
};
template <typename T>
struct B {
template <typename ...X, typename ...Y>
void f(X... a, Y...b) {
}
template <typename ...X>
void g(X...c) {
f<X...> (c...);
}
};
int main() {
A a;
a.g(); // Compiles without problem
B<int> b;
b.g(); // Compiler complains saying g() calls f<>() with 0 arguments while 1 is expected
}
对于第二种情况,g++ 和 clang++ 都给出了相同的基本错误消息。他们基本上说在模板类中对 f() 的调用需要一个参数。
这是两个编译器中的错误,还是我在 C++ 标准中遗漏了什么?