Scoped Imports for Structs/Classes/Template Constraints

Enamex via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Aug 31 16:36:24 PDT 2015


On Monday, 31 August 2015 at 21:22:07 UTC, jmh530 wrote:
> I'm not sure about how the first local.S resolves things. I had 
> been using a selective import for S before. To get the local.S 
> to compile, I have to change the import to a normal one. I'm 
> concerned about the case where local contains more than just S. 
> Suppose I import app : foo; in another module, wouldn't this 
> import all of local? Alternately, suppose I create some 
> function baz that does not use S in any way, then if I import 
> app : baz, then I will inadvertently import local, correct?
>
> The second thing does not compile for me (I had tried that 
> already...). I get
>
> app.d(3): Error: declaration expected, not '{'
> app.d(10): Error: unrecognized declaration

I'm not sure whether a naked 'local.S' should work; sometimes it 
does and sometimes it doesn't. But an `static import local;` then 
`voidfoo(local.S)` definitely works.

`static import` forces the imported symbols to be fully qualified 
on use. It basically only allows the module to recognize the 
existence of modules outside its package.

Doing `import app: foo;` or even just `import app;` would never 
import `module app;`'s imports unless those imports are public.

`module foo; public static import local; import bazoo;`
`module bar; void fun() { local.S s; } // works
void fun2() { bazoo.B b; } // error`


More information about the Digitalmars-d-learn mailing list