Beh non ho detto che il gcc sia migliore in assoluto, solo che il visual spesso se ne esce con delle genialate assurde. Mi viene solo un esempio ora (ma ti assicuro che è capitato spesso in passato di errori/warning molto strani).
Si tratta di un banalissimo esempio di funzione template in c++
codice:
#include <iostream>
using namespace std;
template<class T>
T max( T p1, T p2 ) {
if ( p1 < p2 ) return p2;
else return p1;
}
int main() {
cout << max<int>(10,20) << endl;
cout << max<float>(2.6,1.0) << endl;
return 0;
}
ebbene il visual c (non ricordo quale versione ma comunque una abbastanza recente) dava un errore sulla seconda cout perché per lui
max<float>(2.6,1.0)
è ambigua in quanto la funzione template è chiamata con valori float (come indicato tra parentesi angolari) ma il compilatore interpreta quei valori passati come argomento come double perché non c'è la F! (visto che i valori con la virgola, di default, sono intepretati come double)
in pratica la scrittura corretta - secondo il visual - doveva essere questa:
codice:
cout << max<float>(2.6F, 1.0F) << endl;
cioè in pratica devi specificare due volte che quei valori sono float e non double... una volta nelle parentesi angolari e un'altra nell'elenco degli argomenti... che bello! (ah, il gcc non segnalava nulla, come penso sia ovvio).
Comunque vabbè non voglio iniziare ora una "compiler-war", anche perché non è che me ne freghi qualcosa di difendere il gcc o di screditare il compilatore del visual.
D'altra parte giuseppe ha detto di aver iniziato appena il linguaggio c++, quindi per quello che si troverà a fare immagino proprio che un compilatore valga l'altro...