member function as template parameter workaround needed
timotheecour
thelastmammoth at gmail.com
Thu Sep 13 17:46:49 PDT 2012
On Friday, 14 September 2012 at 00:31:15 UTC, Andrej Mitrovic
wrote:
> On 9/14/12, timotheecour <thelastmammoth at gmail.com> wrote:
>> It has issues when the class is defined in a different modules,
>> but not always!
>
> This looks like a compiler bug. Feel free to file it in
> http://d.puremagic.com/issues/
I will.
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
}
----
More information about the Digitalmars-d-learn
mailing list