-2

このコードを考えると:

#include <type_traits>
template<char ...Cs>
auto foo() -> typename std::enable_if<(sizeof...(Cs) > 1)>::type{
}

template<char C>
void foo() {
}

int main(){
    foo<'s'>();
}

私は上記の C++ プログラムを持っていますが、標準で規定されている規則に従って、2 つの「foo」テンプレートのどちらが main の「foo」呼び出しに対してインスタンス化されるのか疑問に思っています。

4

1 に答える 1

0

それぞれにプリントを追加して、次のことを確認できます。

template<char ...Cs>
auto foo() -> typename std::enable_if<(sizeof...(Cs) > 1)>::type{
    cout << "1" << endl;
}
template<char C>
void foo() {
    cout << "2" << endl;
}
void EnableIfWithSizeof(){
    foo<'s'>();
}

int main() {
EnableIfWithSizeof();
return 0;
}

結果の出力は2

于 2014-06-03T02:47:36.063 に答える