here's my other weird example, which I managed to simplify to as follows. Basically if: 1) the function is overloaded, and 2) it is a template, and 3) it is a member function (either static or nonstatic) Then you get a CT error that looks like: Error: (A).fun!(2) is not an lvalue That's a bug too right? (but different!) I wish delegates were more 1st class citizens and behaved... ---- void run(Fun)(Fun fun){ } class A { void fun1(int T)() if(T==2) { } void fun2(int T)() if(T==1) { } void fun2(int T)() if(T==2) { } void fun3(){} void fun3(int x){} void fun4(int T)() if(T==1) { } void fun4(int T)(int x) if(T==2) { } void fun5(T)() { } void fun5(T)(int x) { } static void fun6(int T)() if(T==1) { } static void fun6(int T)() if(T==2) { } } void fun7(int T)() if(T==1) { } void fun7(int T)() if(T==2) { } void main(){ auto a=new A; run(&a.fun1!2); //works //run(&a.fun2!2); //CT Error: a.fun2!(2) is not an lvalue run(&a.fun3); //works //run(&a.fun4!2); //CT Error: a.fun4!(2) is not an lvalue //run(&a.fun5!double); //CT Error: a.fun5!(double) is not an lvalue //run(&A.fun6!2); //CT Error: (A).fun6!(2) is not an lvalue run(&fun7!2); //works } ----
All of these now work, except for run(&a.fun5!double); which ICEs after correctly being rejected.
run(&a.fun3); should be ambiguous, because there's not enough context to determine overload resolution.
fun5 no longer ices, fun3's accepts-invalid is probably a duplicate.
(In reply to Kenji Hara from comment #2) > run(&a.fun3); should be ambiguous, because there's not enough context to > determine overload resolution. Current state with 2.066 git-head is: void main() { auto a=new A; run(&a.fun1!2); // correctly accepted run(&a.fun2!2); // correctly accepted run(&a.fun3); // wrongly accepted -> dup of issue 1983 run(&a.fun4!2); // correctly accepted //run(&a.fun5!double); // correctly rejected // Error "matches more than one template declaration", expected run(&A.fun6!2); // correctly accepted run(&fun7!2); // correctly accepted } *** This issue has been marked as a duplicate of issue 1983 ***