Possibile import problem

Bill Baxter dnewsgroup at billbaxter.com
Mon Dec 17 15:42:01 PST 2007


bearophile wrote:
> This is a problem I have found, it requires 3 source files, called test.d, a.d, b.d.
> 
> ---------------
> 
> The a.d module:
> 
> import std.string: join;
> import std.string: join;
> 
> ---------------
> 
> The b.d module: 
> 
> import std.string: join;
> 
> ---------------
> 
> The main module is test.d:
> 
> import a, b;
> void main() {
>     join(["a"], "");
> }
> 
> ---------------
> 
> DMD v1.024 produces this:
> 
> test.d(4): Error: a.join at a.d(1) conflicts with b.join at b.d(1)
> 
> Is this a bug? Aren't names qualified imports private too? And if not, why?

Yes, they should be private.  The fact that they aren't is a bug.  One 
of these:
    http://d.puremagic.com/issues/show_bug.cgi?id=313
    http://d.puremagic.com/issues/show_bug.cgi?id=314
    http://d.puremagic.com/issues/show_bug.cgi?id=1238
    http://d.puremagic.com/issues/show_bug.cgi?id=1504



This is total guess, but I suspect the reason is because selective 
imports are just a quick hack that change the import to a static import 
and then do an alias for you.

In other words I'm pretty sure this:

    import module : identifier;

generates code identical to this:

    static import module;
    alias module.identifier identifier;

I'm not sure why it wouldn't turn it into "private alias", but I think 
one of those bugs above says private aliases still conflict, so maybe it 
*is* actually turning it into a private alias.

--bb


More information about the Digitalmars-d-learn mailing list