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