編譯器警告 (層級 3) C4686
'使用者定義型別' : 行為可能有變更,在 UDT 傳回呼叫慣例中發生變更
類別樣板特製化在用於傳回型別之前未定義。任何可將類別具現化的處理都將解析成 C4686;您可以選擇宣告執行個體或存取成員 (C<int>::anything)。
這項警告是使 Visual C++ .NET 2003 編譯器符合 ISO C++ 標準的處理結果。
此警告在預設情況下為關閉的。如需詳細資訊,請參閱預設為關閉的編譯器警告。
請改試下列作法:
// 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>();
}