#include <iostream>
struct A {};
struct B : public A {};
template<typename T>
void foo(const T &x) { std::cout << "Called template" << std::endl; }
void foo(const A &a) { std::cout << "Called A" << std::endl; }
int main()
{
foo(A());
foo(B());
return 0;
}
Отпечатки:
Called A
Called template
У меня создалось впечатление, что подходящая функция без шаблона всегда выбирается над функцией шаблона. Может ли кто-нибудь объяснить мне шаги разрешения, которые приводят к этому несколько неожиданному результату?