using System;

class A {
	public virtual void Foo (int i) { }
	
	public virtual void Foo (double d) {
		throw new Exception ("Shouldn't be invoked");
	}
	
	public virtual bool this [int i] {
		get { return true; }
	}
	
	public virtual bool this [double d] {
		get { throw new Exception ("Shouldn't be invoked"); }
	}

}

class B : A {
	public override void Foo (double d) {
		throw new Exception ("Overload resolution failed");
	}
	
	public override bool this [double d] {
		get { throw new Exception ("Overload resolution failed"); }
	}
	
	public static void Main () {
		new B ().Foo (1);
		bool b = new B () [1];
	}
}