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>();
}