Pup*_*ppy 15 c++ language-lawyer variadic-templates c++14
template <typename... Args>
void bark( int = 0, Args&&... args ) {}
int main() {
bark();
bark(1);
bark(1, 2);
}
Run Code Online (Sandbox Code Playgroud)
这段代码是否符合C++标准?
建议的副本不包含相同的函数调用.
Col*_*mbo 14
由于CWG 777,声明有效:
在给定的函数声明中,具有默认参数的参数之后的所有每个参数都应具有在此声明或先前声明中提供的默认参数,或者应为函数参数包.
在所有三种情况下,演绎应该成功,因为默认参数对演绎的性质没有影响:如果没有args提供pack参数的参数,则通过[temp.arg.explicit]/3将其推导到空包,否则[temp.deduct.call]/1中的通常规则适用(因为包显然不在非推导的上下文中).