digitalmars.D.bugs - [Issue 14109] New: no property 'z' for type 'Proxy!(true, a, null)
- via Digitalmars-d-bugs (82/82) Feb 01 2015 https://issues.dlang.org/show_bug.cgi?id=14109
https://issues.dlang.org/show_bug.cgi?id=14109 Issue ID: 14109 Summary: no property 'z' for type 'Proxy!(true, a, null) Product: D Version: D2 Hardware: x86 OS: Mac OS X Status: NEW Severity: regression Priority: P1 Component: DMD Assignee: nobody puremagic.com Reporter: timothee.cour2 gmail.com dmd -unittest -c -o- main.d 2.066: works git head(v2.067-devel-e542e14): Error: no property 'z' for type 'Proxy!(true, a, null)' ---- auto setFields_aux(bool isRef,alias foo,string s,T...)(T args){ import std.array:split; import std.conv:to; enum namesCall=split(s,","); static assert(namesCall.length==T.length); static if(isRef){ enum foo2_name="foo"; } else{ auto foo2=foo; enum foo2_name="foo2"; } string getString() { string ret; foreach(i,vali ; namesCall){ ret~=foo2_name~`.`~vali~`=`~`args[`~i.to!string~`];`; } ret~=`return `~foo2_name~`;`; return ret; } mixin(getString()); } private struct Proxy (bool isRef,alias func, string parameters, Args ...) { private static string addParameter (string parameters, string newParameter) () { return parameters is null ? newParameter : parameters ~ "," ~ newParameter; } Args args; this(int dummy,Args args){ static if(Args.length) this.args=args; } auto opDispatch (string name, T) (T value) { return Proxy!(isRef,func, addParameter!(parameters, name), Args, T)(0,args, value); } auto opCall()() { return setFields_aux!(isRef,func, parameters)(args); } } auto ref setfieldsRef(T)(ref T a){ return Proxy!(true,a, null)(0); } auto setfields(T)(T a){ return Proxy!(true,a, null)(0); } auto setfields(T)(){ T a; return Proxy!(true,a, null)(0); } unittest{ struct A{ string z; } auto a0=A("a"); assert(A.init.setfields.z("a")() == a0); } ---- --
Feb 01 2015