コンパイラの警告 (レベル 3) C4686

'user-defined type': 動作と UDT の戻り値の呼び出し規則に変更がある可能性があります。

解説

クラス テンプレートの特殊化が、戻り値の型で使用される前に定義されていません。 クラスがインスタンス化されれば、C4686 は解決します。インスタンスを宣言したり、メンバー (C<int>::some_member など) にアクセスしたりするのも方法の 1 つです。

既定では、この警告はオフに設定されています。 詳細については、「既定で無効になっているコンパイラ警告」を参照してください。

代わりに、次のコードを試してみてください。

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