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