Si ero a conoscenza di typeid , speravo ci fosse un altro metodo, per ora userò questo.

Venendo alla prima implementazione l'ho dovuta scrivere necessariamente nella forma seguente (perchè senza il <T> di cui discutevamo prima il compilatore dava errori in questo caso):

codice:
template <typename T>
friend ostream & operator<<( ostream &output, const myClass<T> &right )
{
	// Altro

	return output;
}

Il problema adesso si verifica quando ad esempio nel client dichiaro più di un oggetto di tipo myClass. In particolare mi da il seguente messaggio di errore:

error C2995: 'std:stream &operator <<(std:stream &,const myClass<T> & )': modello di funzione già definito

Perchè? E come risolvere il problema?


Mentre senza il:

codice:
template <typename T>
Sopra la dichiarazione della funzione questo problema non sussiste, tuttavia il compilatore si comporta in modo strano, ovvero (trattandosi di VS 2010) mi segna come errore (sottolineatura rossa e passandoci sopra con il cursore indica chiaramente qual'è il tipo di errore), ad esempio il fatto di aver dichiarato all'interno della funzione un oggetto di tipo T, o di voler accedere ad una variabile privata dello stesso oggetto, ma mi fa compilare lo stesso con 0 errori e 0 warning