15
template <typename... Args>
void bark(int = 0, Args&&... args) {}
int main() {
bark();
bark(1);
bark(1, 2);
}
此代码是否符合C++标准?默认参数格式良好后的可变参数?
建议的副本不包含相同的函数调用。
template <typename... Args>
void bark(int = 0, Args&&... args) {}
int main() {
bark();
bark(1);
bark(1, 2);
}
此代码是否符合C++标准?默认参数格式良好后的可变参数?
建议的副本不包含相同的函数调用。
由于CWG 777,该声明是有效的:
在一个给定函数声明,所有的 参数与默认参数之后的每个参数应该有一个默认参数 在这个或提供先前的声明或应为功能 参数包。通过[temp.arg.explicit]/3如果没有提供参数包参数
args
,它的推导为空包,否则平常:
扣除应在所有三种情况下取得成功,因为默认参数使得以扣减的性质没有什么区别规则[temp.deduct.call]/1适用(因为该包显然不在未推导的上下文中)。
不是重复:http://stackoverflow.com/questions/29098835/can-parameter-pack-function-arguments-be-defaulted,不包含相同形式的调用。 – Puppy
看起来像是重复给我。即使调用不相同,该问题的答案也显示了标准的两个部分,即使在这种情况下也是无效的。 –
在这个问题中提出的问题已在Clang中得到解决,但Clang仍然拒绝此代码。 – Puppy