using System;

namespace Martin {
	public struct A
	{
		public readonly long Data;

		public A (long data)
		{
			this.Data = data;
		}

		public static explicit operator B (A a)
		{
			return new B ((int) a.Data);
		}
	}

	public struct B
	{
		public readonly int Data;

		public B (int data)
		{
			this.Data = data;
		}

		public static implicit operator A (B b)
		{
			return new A (b.Data);
		}
	}

	class X
	{
		static void Main ()
		{
			B? b = new B (5);
			A? a = b;
			B? c = (B?) a;
			B? d = (Martin.B?) a;
		}
	}
}
