Compilerwarnung (Stufe 1) C4358

'Operator': Der Rückgabetyp von kombinierten Delegaten ist nicht 'void'; der zurückgegebene Wert ist nicht definiert

Zwei Delegaten wurden kombiniert, und der Rückgabewert ist nicht void. Wenn zwei Delegaten mit Rückgabewerten kombiniert werden, die nicht void sind, kann der Compiler keine richtige Zuweisung vornehmen, falls der Rückgabewert des Delegaten verwendet wird.

Im folgenden Beispiel wird C4358 generiert:

// C4358.cpp
// compile with: /clr /W1
delegate int D();
delegate void E();

ref class X {
   int i;
public:
   X(int ii) : i(ii) {}
   int f() {
      return i;
   }
};

ref class Y {
   int i;
public:
   Y() {}
   void g() {}
};

int main() {
   D^ d = gcnew D(gcnew X(1), &X::f);
   D^ d2 = gcnew D(gcnew X(2), &X::f);

   d += d2;   // C4358
   int j = d();   // return value indeterminate

   E^ e = gcnew E(gcnew Y, &Y::g);
   E^ e2 = gcnew E(gcnew Y, &Y::g);
   e += e2;   // OK
}