Какой шаблон 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

Другие вопросы по тегам