我的编译器允许"T&...".这是延期吗?

Joh*_*itb 12 c++ ellipsis c++11

以下工作时我感到很惊讶

template<typename T>
void f(T &...);
Run Code Online (Sandbox Code Playgroud)

我认为我必须将"T"声明为"typename ... T"然后,它只能在C++ 0x中工作.但是上面编译的是严格的C++ 03模式.这是怎么回事?

Joh*_*esD 20

这只是糟糕的旧C varargs语法; 语法允许省略逗号.以下是等效的:

int printf(const char* fmt, ...);
int printf(const char* fmt...);
Run Code Online (Sandbox Code Playgroud)

  • C直立! (4认同)