digitalmars.D - TDPL: Cross-module overloading
- Andrej Mitrovic (22/22) Aug 02 2010 On page 148 it says there's a way to use a local alias in a module like ...
On page 148 it says there's a way to use a local alias in a module like so: // inside calvin.d alias hobbes.transmogrify transmogrify; There is a required "import hobbes" before the alias declaration. That should probably be added to the errata. But the example will not compile: client.d(8): Error: hobbes.transmogrify at hobbes.d(4) conflicts with calvin.transm ogrify at calvin.d(6) client.d(11): Error: hobbes.transmogrify at hobbes.d(4) conflicts with hobbes.trans mogrify at hobbes.d(4) The errors go away if I remove the import to hobbes in the client module. Is this a DMD bug/not implemented feature or should removing the "import hobbes" in client.d be mentioned in TDPL? The alternative, as stated in the book, is to use alias inside the client.d module instead, like so: alias calvin.transmogrify transmogrify; alias hobbes.transmogrify transmogrify; But now the transmogrify function in the susie module is hidden, and the example won't compile: client.d(14): Error: function alias client.transmogrify (uint) is not callable using argument types (string) client.d(14): Error: cannot implicitly convert expression ("hi") of type string to double Adding an alias to susie will make the example compile: // inside client.d alias calvin.transmogrify transmogrify; alias hobbes.transmogrify transmogrify; alias susie.transmogrify transmogrify; Again, I'm not sure whether this was not mentioned in TDPL by accident or if it's a DMD bug.. Let me now if it's a bug and I'll report it. :)
Aug 02 2010