digitalmars.D.bugs - [Issue 12532] New: __traits(compiles, ...) fails to see valid enum symbols
- d-bugmail puremagic.com (41/41) Apr 06 2014 https://d.puremagic.com/issues/show_bug.cgi?id=12532
- d-bugmail puremagic.com (17/17) Apr 06 2014 https://d.puremagic.com/issues/show_bug.cgi?id=12532
- d-bugmail puremagic.com (21/32) Apr 07 2014 https://d.puremagic.com/issues/show_bug.cgi?id=12532
https://d.puremagic.com/issues/show_bug.cgi?id=12532 Summary: __traits(compiles, ...) fails to see valid enum symbols Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: 2krnk gmx.net under certain circumstances, eg when called from a template using mixin and static if, __traits(compiles, ...) fails to see valid enum symbols. (if 'enum' in following example is replaced by 'const bool' or 'immutable bool' all symbols are found.) === EXAMPLE === template valid(string mem){ pragma(msg, "instantiation of 'valid' with: "~mem); static if( !__traits( compiles, mixin(mem) ) ){ enum valid = false; }else{ enum valid = true; } } enum ok = valid!"works"; pragma(msg, "found 'works'? "~ok.stringof ); // true - fine, recognizes 'works' later in module scope enum foo = valid!"bar"; pragma(msg, "found 'bar'? "~foo.stringof ); // true - fine, recognizes 'bar' laterin module scope enum bar = valid!"foo"; pragma(msg, "found 'foo'? "~bar.stringof ); // false - fails to see 'foo' earlier in module scope! enum works = true; void main(){} -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 06 2014
https://d.puremagic.com/issues/show_bug.cgi?id=12532 monarchdodra gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |monarchdodra gmail.com Reduced: //---- enum a = is(typeof(b)); enum b = is(typeof(a)); pragma(msg, a); //true pragma(msg, b); //false //---- I'm not sure this is actually resolvable...? -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 06 2014
https://d.puremagic.com/issues/show_bug.cgi?id=12532Reduced: //---- enum a = is(typeof(b)); enum b = is(typeof(a)); pragma(msg, a); //true pragma(msg, b); //false //---- I'm not sure this is actually resolvable...?sorry, i should have reduced it to enum a = __traits(compiles, b); pragma(msg, a); // true enum b = __traits(compiles, a); pragma(msg, b); // false guess i was too preoccupied with issue 12533. however, i think b should be true, __traits(compiles, ...) should not need the value or type of a. in other words, it should be able to see that a symbol is defined without caring what it actually is. as a matter of fact, in enum c; pragma(msg, typeof(c)); // _error_ pragma(msg, is(typeof(c)) ); // false enum d = __traits(compiles, c); pragma(msg, d); // true this is kinda happening. -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 07 2014