Re: import in mixin template
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?
import in mixin template
Code: mixin template MIXIN(){ import std.stdio; alias m = writeln; //OK } class CLASS{ mixin MIXIN; alias wln1 = writeln; //Error: 'writeln' is not defined, perhaps you need to import std.stdio; ? alias wln2 = std.stdio.writeln; //OK void test(){ wln2("test"); //OK std.stdio.writeln("test"); //Error: Deprecation: module std.stdio is not accessible here, perhaps add 'static import std.stdio;' } } 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)
Re: order of declaration/definition
On Thursday, 27 August 2015 at 13:14:24 UTC, Daniel Kozák wrote: On Thu, 27 Aug 2015 13:01:02 + vitus via Digitalmars-d-learn digitalmars-d-learn@puremagic.com wrote: works ok for me V tom je ten problém :)
Re: order of declaration/definition
On Monday, 24 August 2015 at 01:01:13 UTC, John Colvin wrote: enum A = 1; enum B = C; //Error static if(A) enum C = 0; enum D = C; //OK Is order supposed to matter here? Beter: enum E = 1; struct Foo{ enum X1 = E; static if(1) enum E = 2; enum X2 = E; } static assert(Foo.X1 != Foo.X2); class Bar{ enum X1 = __traits(isAbstractClass, typeof(this)); static if(1) abstract void bar(); enum X2 = __traits(isAbstractClass, typeof(this)); } static assert(Bar.X1 != Bar.X2); mixins has same problem.
alias overloading strange error
//Why expression 'foobar(1);' doesn't work? void foo()(){} void bar(int){} alias foobar = foo; alias foobar = bar; void main(){ .foobar(1); //OK foobar(1); //Error: overload alias 'foo' is not a variable }