Bug 12533 – instantiated template using __traits(compiles, ...) causes semantic errors when reused

Status
NEW
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2014-04-06T16:39:50Z
Last change time
2024-12-13T18:19:35Z
Assigned to
No Owner
Creator
det
Moved to GitHub: dmd#17651 →

Comments

Comment #0 by 2krnk — 2014-04-06T16:39:50Z
compilation fails for no reason in given example involving a template using mixin, static if and __traits(compiles, ...) code reflection. see details in example as it is too complicated to describe. might be related to issue 12532. however, example fails as well when 'enum' is replaced by 'const' === 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 works = valid!"fails"; pragma(msg, "found 'fails' (via 'works')? "~works.stringof ); // compiles but produces 'false': issue 12532 enum dummy = valid!"fails"; pragma(msg, "found 'fails' (via 'dummy')? "~dummy.stringof ); // compiles but produces 'false': issue 12532 enum fails = valid!"fails"; // Error: variable demo.fails had semantic errors when compiling // NOTE: if you comment out the first two usages of valid!"fails", // it will work here - but give 'false' again. // pragma(msg, "found 'fails' (via 'fails')? "~fails.stringof ); void main(){}
Comment #1 by 2krnk — 2014-04-07T22:50:35Z
(In reply to comment #0) might be caused by issue 12541.
Comment #2 by robert.schadek — 2024-12-13T18:19:35Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/17651 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB