www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 18263] New: selective import with same name masks out this

https://issues.dlang.org/show_bug.cgi?id=18263

          Issue ID: 18263
           Summary: selective import with same name masks out this
                    reference in mixin template
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: default_357-line yahoo.de

The following code fails with an error:

mixin template HappyFunTime()
{
    static void foo()
    {
        import std.meta : Filter;
        alias bar = this.bar;
    }
}

struct Filter
{
    void bar() { }

    mixin HappyFunTime;
}

test.d(9): Error: identifier 'bar' of 'Filter.bar' is not defined

What happens is that because both Filter and std.meta.Filter have the same
name, the import for std.meta.Filter somehow masks out the struct Filter for
the "this" lookup in the alias.

This is horrifying. If this lookup absolutely has to be done by name, it should
at least be done by fqn.

--
Jan 18 2018