Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
June 09, 2013 UDA strange behavior | ||||
---|---|---|---|---|
| ||||
@(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 Re: UDA strange behavior | ||||
---|---|---|---|---|
| ||||
Posted in reply to Temtaime | 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 Re: UDA strange behavior | ||||
---|---|---|---|---|
| ||||
Posted in reply to David | Oh, thanks. But then that code doesn't work: http://dpaste.dzfl.pl/262b966c |
June 09, 2013 Re: UDA strange behavior | ||||
---|---|---|---|---|
| ||||
Posted in reply to Temtaime | Thanks for all, it's unactual anymore. |
June 09, 2013 Re: UDA strange behavior | ||||
---|---|---|---|---|
| ||||
Posted in reply to Temtaime | 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 |
Copyright © 1999-2021 by the D Language Foundation