1 // Bug #62322.
2 using System;
3 
4 public struct integer
5 {
6 	private readonly int value;
7 
integerinteger8 	public integer (int value)
9 	{
10 		this.value = value;
11 	}
12 
operator integerinteger13 	public static implicit operator integer (int i)
14 	{
15 		return new integer (i);
16 	}
17 
operator doubleinteger18 	public static implicit operator double (integer i)
19 	{
20 		return Convert.ToDouble (i.value);
21 	}
22 
operator +integer23 	public static integer operator + (integer x, integer y)
24 	{
25 		return new integer (x.value + y.value);
26 	}
27 }
28 
29 class X
30 {
Add(integer x, object other)31 	public static object Add (integer x, object other)
32 	{
33 		if (other is int) return x + ((int) other);
34 		if (other is double) return x + ((double) other);
35 		throw new InvalidOperationException ();
36 	}
37 
Main()38 	public static int Main ()
39 	{
40 		integer i = new integer (3);
41 		double d = 4.0;
42 
43 		object result = Add (i, d);
44 		if (!(result is double))
45 			return 1;
46 
47 		if ((double) result != 7.0)
48 			return 2;
49 
50 		return 0;
51 	}
52 }
53