https://d.puremagic.com/issues/show_bug.cgi?id=12359

           Summary: implicit overload merging with selective/renamed
                    imports should be removed
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: DMD
        AssignedTo: [email protected]
        ReportedBy: [email protected]


--- Comment #0 from Kenji Hara <[email protected]> 2014-03-13 17:22:11 PDT ---
Currently, selective or renamed imports create alias declaration implicitly.

  import a : b;
  // is mostly equivalent with:
  // import a; alias b = a.b;

  import a : x = b;
  // is mostly equivalent with:
  // import a; alias x = a.b;

But it is problematic behavior, because it would implicitly merge overloads in
the imported module. For example:

  import std.ascii : isDigit;   // bool isDigit(dchar c)

  bool isDigit(char c) { return true; }
  // Here isDigit is an overload set of bool(char) and bool(dchar)

  void main() {
    dchar d = 'a';
    isDigit(d);   // matches to std.ascii.isDiigt
  }

I think import declarations should only handle symbol visibility. So the
current behavior is not orthogonal. Therefore it should be deprecated and
finally removed.

To reproduce same behavior, explicit alias should work.

  import std.ascii : isDigit;   // Don't create alias silently

  bool isDigit(char c) { return true; }
  alias isDigit = std.ascii.isDigit;  // explicitly merge overloads

  void main() {
    dchar d = 'a';
    isDigit(d);   // matches to std.ascii.isDiigt
  }

-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------

Reply via email to