95 lines
1.4 KiB
C#
95 lines
1.4 KiB
C#
|
using System;
|
||
|
|
||
|
public class A
|
||
|
{
|
||
|
public static int Counter;
|
||
|
public static implicit operator string (A c)
|
||
|
{
|
||
|
++Counter;
|
||
|
return "A-class";
|
||
|
}
|
||
|
|
||
|
public static implicit operator Delegate (A c)
|
||
|
{
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public struct B
|
||
|
{
|
||
|
public static int Counter;
|
||
|
public static implicit operator string (B c)
|
||
|
{
|
||
|
++Counter;
|
||
|
return "B-struct";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public struct D
|
||
|
{
|
||
|
public static int Counter;
|
||
|
public static implicit operator Delegate (D d)
|
||
|
{
|
||
|
++Counter;
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public struct E
|
||
|
{
|
||
|
public static int Counter;
|
||
|
public static implicit operator bool (E d)
|
||
|
{
|
||
|
++Counter;
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public class F
|
||
|
{
|
||
|
public static implicit operator bool (F f)
|
||
|
{
|
||
|
throw new ApplicationException ();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class Program
|
||
|
{
|
||
|
public static int Main ()
|
||
|
{
|
||
|
if (new B () != new B () || B.Counter != 2)
|
||
|
return 1;
|
||
|
|
||
|
if (new B () != "B-struct" || B.Counter != 3)
|
||
|
return 2;
|
||
|
|
||
|
if (new B () == null || B.Counter != 4) {
|
||
|
// FIXME: Incorrect null lifting
|
||
|
//return 3;
|
||
|
}
|
||
|
|
||
|
if (new D () != new D () || D.Counter != 2)
|
||
|
return 10;
|
||
|
|
||
|
if (new D () != null || D.Counter != 3) {
|
||
|
// FIXME: Incorrect null lifting
|
||
|
//return 11;
|
||
|
}
|
||
|
|
||
|
if (new A () != "A-class" || A.Counter != 1)
|
||
|
return 20;
|
||
|
|
||
|
if (new A () == null || A.Counter != 1)
|
||
|
return 21;
|
||
|
|
||
|
if (new E () != new E () || E.Counter != 2)
|
||
|
return 31;
|
||
|
|
||
|
if (new F () == new F ())
|
||
|
return 40;
|
||
|
|
||
|
Console.WriteLine ("ok");
|
||
|
return 0;
|
||
|
}
|
||
|
}
|