为什么C++不允许在非模板函数中使用可变参数?

xml*_*lmx 4 c++ overloading variadic-functions

int foo(int i)
{
    return i;
}

int foo(int i, int... n)
{
    return i + foo(n...);
}

int main()
{
    return foo(1, 2, 3); // error
}
Run Code Online (Sandbox Code Playgroud)

为什么C++不允许这样直观的语法?

Vir*_*Vir 6

您需要模板机制来实例化您的第二个foo函数,因为函数的签名仅在使用时确定.因此,您可以在这里要求的唯一功能是,您的语法意味着一个函数模板,其中模板参数包被约束为键入int.

但是,对于没有template关键字的模板存在相当大的反对意见.但是,在这方面,概念TS将会发生变化.