默认参数后的变量参数是否格式正确? 模板 无效树皮(int=0,Args&…Args){} int main(){ 树皮(); 树皮(1); 树皮(1,2); } 这个代码是按照C++标准形成的吗?< /P>

默认参数后的变量参数是否格式正确? 模板 无效树皮(int=0,Args&…Args){} int main(){ 树皮(); 树皮(1); 树皮(1,2); } 这个代码是按照C++标准形成的吗?< /P>,c++,language-lawyer,c++14,variadic-templates,C++,Language Lawyer,C++14,Variadic Templates,建议的副本不包含相同的函数调用。由于以下原因,声明有效: 在给定的函数声明中,在 带有默认参数的参数应具有默认参数 本声明或之前声明中提供的或应为函数 参数包 在所有三种情况下,推断都应该成功,因为默认参数对推断的性质没有影响:如果没有为pack参数args提供参数,则通过将其推断到空pack,否则中的常规规则适用(因为pack显然不在非推断上下文中) 不重复:,不包含相同形式的调用。在我看来是重复的。即使调用不完全相同,该问题的答案显示了标准的两个部分,它们表示即使在这种情况下也无效。该问题中

建议的副本不包含相同的函数调用。

由于以下原因,声明有效:

在给定的函数声明中,在 带有默认参数的参数应具有默认参数 本声明或之前声明中提供的或应为函数 参数包


在所有三种情况下,推断都应该成功,因为默认参数对推断的性质没有影响:如果没有为pack参数
args
提供参数,则通过将其推断到空pack,否则中的常规规则适用(因为pack显然不在非推断上下文中)

不重复:,不包含相同形式的调用。在我看来是重复的。即使调用不完全相同,该问题的答案显示了标准的两个部分,它们表示即使在这种情况下也无效。该问题中提出的问题已在Clang中修复,但Clang仍然拒绝此代码。嗯,我错误地阅读了答案中的标准片段。根据标准,它实际上应该是有效的代码。但它仍然是一个复制品。你的表格和问题的第一部分是一样的。我仍然不明白为什么这不是一个骗局。另一个问题回答了这个问题。
template <typename... Args>
void bark( int = 0, Args&&... args ) {}

int main() {
     bark();
     bark(1);
     bark(1, 2);
}