Listing 3
delegate void D1();
delegate void D2();
public struct A
{
static void M1() { /* ... */ }
static void M2() { /* ... */ }
};
void X(D1^ m) { /* ... */ }
void Y(D2^ n) { /* ... */ }
int main()
{
D1^ d1;
/*1*/ d1 = gcnew D1(&A::M1); // compatible
/*2*/ d1 = gcnew D1(&A::M2); // compatible
D2^ d2;
/*3*/ d2 = gcnew D2(&A::M1); // compatible
/*4*/ d2 = gcnew D2(&A::M2); // compatible
/*5*/ d1 = d2; // incompatible
/*6*/ d2 = d1; // incompatible
/*7*/ X(d1); // compatible
/*8*/ X(d2); // incompatible
/*9*/ Y(d1); // incompatible
/*10*/ Y(d2); // compatible
}