On Saturday, 23 March 2013 at 12:12:30 UTC, Philippe Sigaud wrote:
On Sat, Mar 23, 2013 at 12:57 PM, Martin <[email protected]> wrote:
On Saturday, 23 March 2013 at 11:55:37 UTC, Andrej Mitrovic wrote:

On Saturday, 23 March 2013 at 10:46:11 UTC, Martin wrote:

   enum allMembers = __traits(allMembers, T);


Try:
     enum allMembers = [__traits(allMembers, T)];


That actually works, thanks. I thought tuples were supposed be indexable
though

They are, I think it's a bug.

If the alias grammar was more open, we could do:

alias allMembers = __traits(allMembers, T);

but since __traits are not accepted as an alias target, we must use a
wrapping template as a workaround:

import std.stdio;

struct TestStruct
{
    int a;
    int b;
    int c;
}

/// Just to hide __traits:
template Alias(aliases...)
{
    alias Alias = aliases;
}

template getSomeMember(T)
{

    alias members = Alias!(__traits(allMembers, T));

    // now members is a tuple of members
    // perfectly indexable & slicable
    enum getSomeMember = allMembers[0];

}

void main(string[] args)
{
    enum someMember = getSomeMember!TestStruct;
    writeln(typeof(someMember).stringof);
    writeln(someMember);
}

I see, thanks a lot

Reply via email to