Are public/private imports implemented?

Bill Baxter dnewsgroup at billbaxter.com
Mon Jan 21 07:13:28 PST 2008


Tyro[a.c.edwards] wrote:
> 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.

The truth seems to be more that fully qualified names are always made 
public.
http://d.puremagic.com/issues/show_bug.cgi?id=314.

--bb


More information about the Digitalmars-d-learn mailing list