ho il seguente codice:modello di sovraccarico oltre puntatore a puntatore
template<class A, class B>
void test(A& a, const B* b)
{ std::cout << "hi" << std::endl; }
template<class A, class B>
void test(A& a, const B** b)
{ std::cout << "hello" << std::endl; }
class TestClass
{};
int main()
{
int a = 5;
TestClass b;
TestClass* c = &b;
test(a, &c);
return 0;
}
In qualche modo l'uscita è "Hi" anche se sembra che migliore corrispondenza sarebbe la seconda funzione template. Quando rimuovo const
s come qualificatori su B*
e B**
, ricevo "Ciao" che corrisponde alla seconda funzione di modello. In che modo il compilatore sceglie la funzione da chiamare in questo caso? Grazie!