DMD (dmdfe 2.066) fail when i use UDA which store a delegate
code below works if i remove @section UDA otheswise it give this error: dmd: statement.c:714: ErrorStatement::ErrorStatement(): Assertion `global.gaggedErrors || global.errors' failed. is a bug ? ------- CODE also on dpaste http://dpaste.dzfl.pl/3a3d660bd3bc -------- import std.stdio; import std.typecons : Tuple; import std.typetuple : Filter; struct attribute{} @attribute struct section( alias start, alias end) { alias checkStart = start; alias checkEnd = end; } template hasSection(T) { static bool helper() { foreach(memberName; __traits(allMembers, T)) { foreach(attr; __traits(getAttributes, __traits(getMember, T, memberName))) { static if(is(attr == Section)) return true; } } return false; } enum hasSection = helper(); } struct Data{ @section!( ( words ) => words[0] == '@' , ( words ) => words[0] == '\n' ) string a; @section!( ( words ) => words[0] > 63 && words[0] <115 , ( words ) => words[0] == '\n' ) string b; @section!( ( words ) => words[0] == '+' , ( words ) => words[0] == '\n' ) string c; } template toTuple(T){ static string maker(){ string statement = "alias toTuple = Tuple!("; foreach(const memberName; __traits(allMembers, T)){ //~ mixin(`alias f = Filter!(hasSection, __traits(getAttributes, T.` ~ memberName ~ `));`); statement ~= typeof(__traits(getMember, T, memberName)).stringof ~ ",\"" ~ memberName ~ "\", " ; } statement = statement[0..$-2] ~ ") ;" ; // $-2 to remove extra comma return statement; } mixin( maker() ); } void main() { alias A = toTuple!Data; A a; a[0] = 1; a.x = 1; }