Какой шаблон foo будет создан?
Учитывая этот код:
#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'>();
}
У меня есть вышеупомянутая программа на С ++, и мне просто интересно, в соответствии с правилами, изложенными в стандарте, какой из двух шаблонов "foo" будет создан для вызова "foo" в main.
1 ответ
Вы можете добавить печать к каждому, чтобы узнать:
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