Can't use function with same name as module?

Steven Schveighoffer schveiguy at yahoo.com
Tue Oct 17 13:23:45 UTC 2017


On 10/17/17 2:13 AM, Shriramana Sharma wrote:
> Hello.
> 
> fun.d:
> import std.stdio;
> void fun() { writeln("Hello"); }
> 
> main.d:
> import fun;
> void main() { fun(); }
> 
> $ dmd -oftest fun.d main.d
> main.d(2): Error: function expected before (), not module fun of type void
> 
> Why can't I use a function of the same name as the module? IIUC import 
> fun imports all the top-level symbols within module fun as well as the 
> symbol fun referring to the module itself. This is just another case of 
> overloading, no? Can't the compiler understand that I am trying to call 
> the function fun.fun() and not the module even when it is followed by ()?

I know you have filed a report, and probably it should be considered (it 
surprises me that types work but functions don't, they are all symbols).

But just as reference, the reason it doesn't come up much is because 
most modules are within a package, which means you never have top level 
modules.

But it probably doesn't make a lot of sense to create a package if your 
library only has one module. It's just not very common.

-Steve


More information about the Digitalmars-d-learn mailing list