I want to create a simple clone operator based on UDAs. First step is to create a tuple of the fields with desired UDA value and construct a clone method which uses that tuple.
import std.traits; enum Cloneable; struct Foo { @Cloneable int cloneableInt; @Cloneable string cloneableStr; float notCloneable; } I came up with this to iterate through fields and print out ones with @Cloneable set: foreach(member; __traits(allMembers, Foo)) { foreach(attr; __traits(getAttributes, mixin(member))) { static if(is(attr == Cloneable)) { pragma(msg, member); } } } How can I use this code or something similar to dynamically construct a tuple containing types of fields marked as @Cloneable?