www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - alias overloading strange error

reply "vitus" <vitus vitus.vitus> writes:
//Why expression 'foobar(1);' doesn't work?


void foo()(){}
void bar(int){}

alias foobar = foo;
alias foobar = bar;

void main(){
	.foobar(1);		//OK
	foobar(1);		//Error: overload alias 'foo' is not a variable

}
Jul 31 2015
next sibling parent "simendsjo" <simendsjo gmail.com> writes:
On Friday, 31 July 2015 at 10:56:33 UTC, vitus wrote:
 //Why expression 'foobar(1);' doesn't work?


 void foo()(){}
 void bar(int){}

 alias foobar = foo;
 alias foobar = bar;

 void main(){
 	.foobar(1);		//OK
 	foobar(1);		//Error: overload alias 'foo' is not a variable

 }
foo is a template, while bar is a function. I would have thought the `.foobar(1)` should have failed too... Must be some strange lookup rules I don't know about (or a dmd bug). `alias foobar = foo!();` should make it work in both cases though.
Jul 31 2015
prev sibling parent reply "anonymous" <anonymous example.com> writes:
On Friday, 31 July 2015 at 10:56:33 UTC, vitus wrote:
 //Why expression 'foobar(1);' doesn't work?


 void foo()(){}
 void bar(int){}

 alias foobar = foo;
 alias foobar = bar;

 void main(){
 	.foobar(1);		//OK
 	foobar(1);		//Error: overload alias 'foo' is not a variable

 }
It works when you switch the aliases around: ---- void foo()(){} void bar(int){} alias foobar = bar; alias foobar = foo; void main(){ foobar(1); } ---- Definitely a bug. Please file an issue at <https://issues.dlang.org/>.
Jul 31 2015
parent "anonymous" <anonymous example.com> writes:
On Friday, 31 July 2015 at 11:09:39 UTC, anonymous wrote:
 Definitely a bug. Please file an issue at 
 <https://issues.dlang.org/>.
https://issues.dlang.org/show_bug.cgi?id=14858
Aug 01 2015