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?

Reply via email to