Why does this not work anymore?

Martin martinbbjerregaard at gmail.com
Sat Mar 23 05:57:28 PDT 2013


On Saturday, 23 March 2013 at 12:12:30 UTC, Philippe Sigaud wrote:
> On Sat, Mar 23, 2013 at 12:57 PM, Martin 
> <martinbbjerregaard at gmail.com> 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


More information about the Digitalmars-d mailing list