コンパイラの警告 (レベル 3) C4686
'ユーザー定義型' : 動作と UDT の戻り値の呼び出し規約に変更がある可能性があります。
クラス テンプレート指定が、戻り値の型で使用される前に定義されていませんでした。クラスのインスタンス化により C4686 が解決されます。インスタンスの宣言またはメンバーのアクセス (C<int>::anything) も省略可能です。
この警告は、Visual C++ .NET 2003 コンパイラを ISO C++ 標準に準拠させる作業の結果として生成されます。
既定では、この警告はオフに設定されています。詳細については、「Compiler Warnings That Are Off by Default」を参照してください。
代わりに、次のコードを試してください。
// 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>();
}