コンパイラの警告 (レベル 1) C4383

'instance_dereference_operator' : ユーザー定義の 'operator' 演算子が存在する場合、ハンドルを逆参照することの意味が変わる可能性があります。演算子は、オペランドに関して明示的になるように、静的関数として記述してください

ユーザー定義インスタンスで、マネージド型の逆参照演算子のオーバーライドを追加すると、このオーバーライドにより、型の逆参照演算子がハンドルのオブジェクトを返すことができなくなる可能性があります。 静的なユーザー定義の逆参照演算子を記述することを検討してください。

詳細については、「オブジェクト演算子 (^) へのハンドル」および「参照演算子の追跡」を参照してください。

また、他の言語コンパイラから、被参照メタデータを介してインスタンス演算子を使用することはできません。 詳細については、「ユーザー定義の演算子 (C++/CLI)」を参照してください。

次の例では C4383 が生成されます。

// C4383.cpp
// compile with: /clr /W1

ref struct S {
   int operator*() { return 0; }   // C4383
};

ref struct T {
   static int operator*(T%) { return 0; }
};

int main() {
   S s;
   S^ pS = %s;

   T t;
   T^ pT = %t;
   T% rT = *pT;
}