Are public/private imports implemented?

Tyro[a.c.edwards] no at spam.com
Mon Jan 21 06:42:59 PST 2008


Ary Borenszweig ????????:
> Again, testing some Descent semantic code, I was getting errors on 
> undefined functions.
> 
> ---
> module one;
> 
> import two;
> 
> void foo() {
>     char[] srcfilename = std.path.join("one", "two");
> }
> ---
> 
> ---
> module two;
> 
> import std.path; // same with "private import std.path;"
> ---
> 
> I was getting an error on "std.path.join", because since the import on 
> module two is private, join is not visible. But DMD seems to compile it 
> without problems. What's the truth about imports?

module imports are private by default. This means that since you 
"privately" imported std.path into module two, then the entire content 
of the std.path module becomes visible to module two, and module two 
alone. As a result std.path is not defined in module one. In order for 
it to be defined, you would also need to import std.path in module one 
or do "public import std.path;" in module two.

Andrew


More information about the Digitalmars-d-learn mailing list