class Value {
	public static explicit operator int (Value val)
	{
		return 1;
	}

	public static explicit operator MyObject (Value val)
	{
		return new MyObject (1);
	}	

	public static explicit operator uint (Value val)
	{
		return 1;
	}
}

class MyObject {
	public MyObject (int i) {}
}

class Derived : MyObject {
	public Derived (int i) : base (i) { }

	Derived Blah ()
	{
		Value val = new Value ();

		return (Derived) val;
	}
}

class Test {
	static int Main ()
	{
		Value v = new Value ();

		v = null;

		try {
			// This will throw an exception.
			// This test is more of a compile test, we need a real
			// good test that does not require this lame catch.
			Derived d = (Derived) v;
		} catch {
		}

		return 0;
	}
}
