Partager via


Avertissement du compilateur (niveau 1) C4358

'operator' : le type de retour des délégués combinés n’est pas 'void' ; la valeur retournée n’est pas définie

Deux délégués ont été combinés et la valeur de retour n’est pas void. Si deux délégués avec des valeurs de retour non void sont combinés, le compilateur ne pourra pas effectuer une affectation appropriée si la valeur de retour du délégué est utilisée.

L’exemple suivant génère l’erreur C4358 :

// 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
}