コンパイラの警告 (レベル 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>();
}