Thread overview
UDA strange behavior
Jun 09, 2013
Temtaime
Jun 09, 2013
David
Jun 09, 2013
Temtaime
Jun 09, 2013
Temtaime
Jun 09, 2013
Jacob Carlborg
June 09, 2013
@(3) int a;
enum tp = __traits(getAttributes, a);
				
enum b = tp[0];
writeln(b);

Compiler doesn't accept enum b = tp[0] and says to me:
Error: variable _tp_field_0 cannot be read at compile time

Why? And writeln(tp[0]) works as expected.
June 09, 2013
Am 09.06.2013 11:15, schrieb Temtaime:
> @(3) int a;
> enum tp = __traits(getAttributes, a);
> 
> enum b = tp[0];
> writeln(b);
> 
> Compiler doesn't accept enum b = tp[0] and says to me: Error: variable _tp_field_0 cannot be read at compile time
> 
> Why? And writeln(tp[0]) works as expected.

It works like that:
http://dpaste.dzfl.pl/809de989

@(3) int a;
enum tp = [__traits(getAttributes, a)];
enum b = tp[0];
pragma(msg, b);


The exact reason why you have to expand the tuple into an array, I don't know, or can't remember ;)
June 09, 2013
Oh, thanks. But then that code doesn't work:
http://dpaste.dzfl.pl/262b966c

June 09, 2013
Thanks for all, it's unactual anymore.
June 09, 2013
On 2013-06-09 11:15, Temtaime wrote:
> @(3) int a;
> enum tp = __traits(getAttributes, a);
>
> enum b = tp[0];
> writeln(b);
>
> Compiler doesn't accept enum b = tp[0] and says to me:
> Error: variable _tp_field_0 cannot be read at compile time
>
> Why? And writeln(tp[0]) works as expected.

__traits(getAttributes) returns a tuple. Try using an alias instead, something like:

import std.typetuple
alias tp = TypeTuple!(__traits(getAttributes, a));

-- 
/Jacob Carlborg