--- /dev/null
+#! [contains] MissigTmplException
+fun void test(C cc) { <<< cc.test(2) >>>; }
+
+fun void test(C cc, int i) { <<< 1 >>>; <<< cc.test(i, i) >>>; }
+
+
+class C {
+ fun int test<~A~>(A a) { <<< " A ", a >>>; }
+ fun int test<~A~>(A a, int i) { <<< " ", a >>>; }
+ fun int test<~A~>(A a, int i, int j) { <<< a >>>; }
+}
+class D extends C {
+ fun int test<~A~>(A a, int i) { <<< this, " extent ", a, __func__ >>>; }
+}
+class E extends D {
+ fun int test<~A~>(A a, int i) { <<< this, " Extent ", a, _func__ >>>; }
+}
+
+
+<<< C c >>>;
+<<< D d >>>;
+<<< E e >>>;
+
+test(c);
+test(d);
+test(e);
+test(c,1);
+test(d,2);
+test(e,3);
+<<< test >>>;
+
+
+c.test(1);
+c.test(123,1);
+c.test(1, 2, 3);
+
+d.test(2);
+d.test(123,3);
+d.test(2, 2, 3);
+
+e.test(3);
+e.test(123,3);
+e.test(3, 2, 3);
+
+fun void _test() {<<< "test" >>>; }
+fun void test() { _test(); }
+test();
+