#include <iostream>
template<typename T>
bool pair_comparer(T a, T b) {
return a != b;
}
template<typename T, typename... Args>
bool pair_comparer(T a, T b, Args... args) {
return a == b && pair_comparer(args...);
}
int main() {
bool areSame = pair_comparer(1, 1, 2, 2, 6, 6);
std::cout << "areSame " << areSame << endl; // prints 0
return 0;
}
私は例をコンパイルするとは思っていませんが、 2つの引数を持つpair_comparer
の呼び出しはここでどのように解決されますか?私はあなたが持っているpair_comparer
への最初の呼び出しではバリデーションテンプレート:オーバーロードの解像度
第1のオーバーロードが第2のオーバーロードよりも優れた一致であると結論づける過負荷解決の規則があり、したがって再帰終了する。 ORルールの全セットは約30ページ分の標準語を取りますが、一言で言えば、最初のオーバーロードは後者の厳密な特殊ケースであり、したがってより優れています。 –