我抓我的頭被以下最少的代碼高亮一個奇怪的問題:令人費解的模板和非模板類
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