我抓我的头被以下最少的代码高亮一个奇怪的问题:令人费解的模板和非模板类
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 ++以及铛++给出了相同的基本错误信息第二种情况。 他们基本上说在模板类中调用f()需要一个参数。
这是两个编译器的错误,还是我错过了C++标准中的某些东西?
'从主干clang'也borks上的第一个版本。 – pmr
有趣。那么标准中的这种方法或功能是不合法的? – Michel