digitalmars.D.learn - Possibile import problem
- bearophile (20/20) Dec 17 2007 This is a problem I have found, it requires 3 source files, called test....
- Bill Baxter (19/50) Dec 17 2007 Yes, they should be private. The fact that they aren't is a bug. One
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? Bye, bearophile
Dec 17 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
Dec 17 2007