Dato il seguente codice:Sovraccarico C++ ha la precedenza su Specializzazione?
#include <iostream>
using namespace std;
template<typename T> void Print(T t) {
cout << t << endl;
}
template<> void Print<int>(int t) {
cout << "int = " << t << endl;
}
void Print(int i) {
cout << "int2 = " << i << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
Print(1.3);
Print("tese");
Print(2);
char c;
cin >> c;
return 0;
}
Perché la chiamata di stampa (2) non ambiguo, ma invece chiamare Stampa void (int i)?
ps: Testato con bcc64.exe e cl.exe.
Poiché la risoluzione del sovraccarico preleva la migliore corrispondenza dall'insieme di funzioni regolari e modelli primari. Solo quando ciò è fatto, cerca delle specializzazioni. C'è un articolo su GOTW di Herb Sutter su questa stranezza. [Qui.] (Http://www.gotw.ca/publications/mill17.htm) – jrok
@jrok e questo non è corretto – PierreBdR
@PierreBdR Oh. Non si applica in questo caso, ammetto (lettura errata da parte mia) Ma è corretto altrimenti :) – jrok