【发布时间】:2019-07-31 17:38:35
【问题描述】:
在 C++03 标准中,[dcl.fct] p.2 指出:
parameter-declaration-clause 确定在调用函数时可以指定的参数及其处理。 [注:parameter-declaration-clause用于转换函数调用上指定的参数;见 5.2.2。 —尾注]如果参数声明子句为空,则函数不接受参数。参数列表(void)等效于空参数列表。除了这种特殊情况,void 不应是参数类型(尽管派生自 void 的类型,例如 void*,可以)。如果参数声明子句以省略号结尾,则参数的数量应等于或大于没有默认参数的参数的数量。 在语法正确的情况下,“, ...”与“...”同义。
parameter-declaration-clause 的语法允许它以... 或, ... 结尾。我找到了this question,答案说最初语法只允许...,并引入了逗号变体(, ...)以与C兼容。
我的问题是为什么引用的段落说“语法正确”?考虑到 function parameter packs 或 pack expansions 在 C++03 中不存在,是否存在将 ... 视为 , ... 同义词的“语法错误”?
谢谢。
【问题讨论】:
标签: c++ language-lawyer variadic-functions