При попытке перегрузить шаблон функции и функции я получаю другое поведение. Для функции:
void foo(int)
{
std::cout << "int";
}
void foo(char)
{
std::cout << "char";
}
foo(42)
int
. Но для шаблона функции:
template <int T>
void bar()
{
std::cout << "int T";
}
template <char T>
void bar()
{
std::cout << "char T";
}
bar<42>()
- неоднозначный вызов. Это происходит, даже если я использую char, например bar<'a'>()
. Почему одно работает, а не другое?