[Mono-list] casting reference arguments

Alan Jenkins sourcejedi@phonecoop.coop
Thu, 29 Jul 2004 11:44:42 +0000


I've found another case where the compiler should give a different error (at 
the moment it crashes).

public class Test {
	public static void Main ()
	{
		byte b = 8;
		int i = 256;

		Increment (ref b);
		System.Console.WriteLine ("8 + 1 = {0}", b);

		Increment (ref i);
		System.Console.WriteLine ("256 + 1 = {0}", i);
	}

	public static void Increment (ref int arg)
	{
		arg += 1;
	}

	public static void Increment (ref byte arg)
	{
		// reference cast - not allowed
		Increment (ref (int) arg);
	}
}

Who needs specifications to test against when you have a twisted mind?  
Seriouslly though, the above code could be legal - mcs might be expected to 
create a temporary variable of type int, assign the byte value to it, call 
the other Increment overload with it, and then assign its value back to the 
byte argument - so a check against the microsoft compiler is necessary.

Alan