digitalmars.D.bugs - [Issue 19854] New: Code stops Compiling when removing pragma(msg, |
- d-bugmail puremagic.com (60/60) May 08 2019 https://issues.dlang.org/show_bug.cgi?id=19854
https://issues.dlang.org/show_bug.cgi?id=19854 Issue ID: 19854 Summary: Code stops Compiling when removing pragma(msg, | probably related to UDAs on enums Product: D Version: D2 Hardware: x86_64 OS: Windows Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: puremagic zoadian.de import std.stdio; import std.meta; import std.traits; import std.conv; struct UI_LABEL { string label; } enum isEnum(e) = is(e == enum); enum Type { UI_LABEL("Hans") type_hans, UI_LABEL("Peter") type_peter, } struct Node { Type type; } string generateUI(NODE)(NODE node) { string ret; static foreach(i, P; NODE.tupleof) {{ static if(isEnum!(typeof(P))) { ret ~= ", combo["; static foreach(o, O; EnumMembers!(typeof(P))) { ret ~= O.to!string; //********************************************** // ADD THIS LINE AND IT COMPILES JUST FINE //pragma(msg, __traits(getAttributes, EnumMembers!(typeof(P))[o])); //********************************************** static foreach(UDA; getUDAs!(EnumMembers!(typeof(P))[o], UI_LABEL)) { ret ~= ", label = " ~UDA.label.to!string; } ret ~= " | "; } ret ~= "]"; } ret ~= "\n"; }} return ret; } void main() { import std.stdio; Node node; node.generateUI().writeln; } --
May 08 2019