[Issue 21020] New: named import in with block masks local symbol

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Jul 6 12:00:03 UTC 2020


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

          Issue ID: 21020
           Summary: named import in with block masks local symbol
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: minor
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: default_357-line at yahoo.de

Consider the following code:

void main() {
    import std.stdio : writeln;
    auto writeln = 42;
    writeln(42);
}

It correctly errors that there's two symbols with the same name, being
ambiguous.

Well, it *sort of* correctly errors - if you reverse the order, you hit
https://issues.dlang.org/show_bug.cgi?id=15400 from 2015. But the principle
stands.

Also, if you do:

struct S { }
void main() {
  auto writeln = 42;
  with (S()) {
    alias writeln = (a) { };
    writeln(42);
  }
}

You get the expected error that 'alias writeln is shadowing variable writeln'.

However:

struct S { }
void main() {
  auto writeln = 42;
  with (S()) {
    import std.stdio : writeln;
    writeln(42);
  }
}

This compiles, despite being just as ambiguous.

--


More information about the Digitalmars-d-bugs mailing list