Conflict between function and template with the same name

Rene Zwanenburg via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jun 29 02:31:29 PDT 2014


On Sunday, 29 June 2014 at 08:52:36 UTC, Uranuz wrote:
>> import std.stdio;
>>
>> string getByName(string name)
>> {
>> 	return "smth";
>> }
>>
>> template getByName(string name)
>> {
>> 	enum getByName = .getByName(name);
>> }
>>
>>
>> void main()
>> {
>> 	writeln(getByName!("name"));
>> }
>
> Thanks a lot! Very interesting. Do you see any reasoning why 
> this happens?

I think it has to do with variable shadowing. The lookup rules 
for enums are the same as for variables. Since the getByName enum 
is declared inside the template scope it takes precedence over 
the function in the outer scope, even when initializing the enum.

I'm not sure though, hopefully someone a bit more knowledgeable 
than me comes along to clarify.

Prepending a dot makes the lookup happen in global scope.


More information about the Digitalmars-d-learn mailing list