import in mixin template

vitus via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed May 25 23:56:26 PDT 2016


On Thursday, 26 May 2016 at 05:47:36 UTC, Era Scarecrow wrote:
> On Thursday, 26 May 2016 at 05:20:25 UTC, vitus wrote:
>> Why 'alias wln1 = writeln;' doesnt't work but 'alias wln2 = 
>> std.stdio.writeln;' work when import is not static? Why 
>> 'wln2("test");' work but 'std.stdio.writeln("test");' doesn't? 
>> (changing import to static import doesn't change anything)
>
>  The import seems to be localized to just the mixin & the 
> template. Makes sense since you don't want to be cluttering the 
> namespace with other imports.
>
>  The only thing you haven't shown is that the 'alias m' is 
> identified and accessible. Adding it in the compiler doesn't 
> complain; Only line 11 (alias wln1) complains for me DMD w32 
> v2.071.0.

But why is 'std.stdio.writeln' accessible from CLASS but writeln 
no? Both are imported in MIXIN.

and:

mixin template MIXIN(){
	import std.stdio;
}

class CLASS{

	mixin MIXIN;

	void test(){
		alias wln = std.stdio.writeln;	//OK
		wln("test");	//OK
		std.stdio.writeln("test");	//Error: Deprecation: module 
std.stdio is not accessible here, perhaps add 'static import 
std.stdio;'
		
	}
}

Why is possible create alias to function 'std.stdio.writeln'  but 
cannot by called as a function directly?



More information about the Digitalmars-d-learn mailing list