https://issues.dlang.org/show_bug.cgi?id=15335
--- Comment #5 from [email protected] --- Here's another idea, this time with more mixins! Don't have time to test thoroughly right now but I _think_ its working with private members and giving back symbols rather than names: template getMembersByUDA(T, alias attribute) { import std.string : format; import std.meta : Filter; template toSymbols(names...) { static if (names.length == 1) mixin("alias toSymbols = AliasSeq!(T.%s);".format(names[0])); else mixin("alias toSymbols = AliasSeq!(toSymbols!(names[1..$]), %s);".format(names[0])); } enum hasSpecificUDA(string name) = mixin("hasUDA!(T."~name~", attribute)"); alias membersWithAttribute = Filter!(hasSpecificUDA, __traits(allMembers, T)); alias getMembersByUDA = toSymbols!(membersWithAttribute); } mixins are like violence ... if they don't work you're not using enough of them. I'll test more later and put up a separate PR if it looks more promising. --
