我的编译器允许“T&...”。这是一个扩展吗?
当以下工作起作用时,我感到很惊讶,
template<typename T>
void f(T &...);
我认为我必须将“T”声明为“typename ...T”,并且它仅适用于 C++0x。但上面是在严格的C++03模式下编译的。这是怎么回事?
I was surprised when the following worked
template<typename T>
void f(T &...);
I thought that I have to declare "T" as "typename ...T" then, and that it only works in C++0x. But the above compiled in strict C++03 mode. What's going on?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这只是糟糕的旧 C 可变参数语法;语法允许省略逗号。以下是等效的:
It's just the bad old C varargs syntax; the grammar allows omitting the comma. The following are equivalent:
你调用了这个函数吗?模板函数在调用之前不会被编译。
在 Visual Studio 2010 中,IntelliSense 显示该函数的真实语法闻起来
像旧的变量参数语法。
Did you call the function? Template functions don't get compiled until you call them.
And in Visual Studio 2010, IntelliSense shows the real syntax of that function would be
Smells like old variable argument syntax.