Avviso del compilatore (livello 3) C4686
'tipo definito dall'utente': modifica nella convenzione di chiamata per il valore restituito del tipo definito dall'utente
Una specializzazione di template di classe non è stata definita prima di essere utilizzata in un tipo restituito. Per evitare la visualizzazione dell'avviso C4686 è possibile utilizzare qualsiasi elemento che crei un'istanza della classe. È anche possibile dichiarare un'istanza o accedere a un membro (C<int>::qualsiasielemento).
Questo avviso è il risultato delle operazioni effettuate per rendere Visual C++ .NET 2003 conforme allo standard ISO C++.
Per impostazione predefinita, questo avviso non è attivo. Per ulteriori informazioni, vedere Avvisi del compilatore disattivati per impostazione predefinita.
Provare a risolvere il problema nel modo seguente:
// C4686.cpp
// compile with: /W3
#pragma warning (default : 4686)
template <class T>
class C;
template <class T>
C<T> f(T);
template <class T>
class C {};
int main() {
f(1); // C4686
}
template <class T>
C<T> f(T) {
return C<int>();
}