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