哪个foo模板将被实例化?

时间:2014-06-03 02:28:06

标签: c++ templates variadic-templates sfinae template-deduction

鉴于此代码:

#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 ++程序,我只是想知道,根据标准中规定的规则,两个“foo”模板中的哪一个将被实例化为main中的“foo”调用。

1 个答案:

答案 0 :(得分: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