User Defined Attribute.
static struct Length { size_t length = 8; } @Length @Length(0) int i; alias uda = AliasSeq!(__traits(getAttributes, i)); alias attr1 = evalUDA!(uda[0]); alias attr2 = evalUDA!(uda[1]); static assert(is(typeof(attr1) == Length)); static assert(is(typeof(attr2) == Length)); static assert(attr1.length == 8); static assert(attr2.length == 0);
If T is a type, constructs its default value, otherwise $(D_PSYMBOL evalUDA) aliases itself to T.
This template is useful when working with UDAs with default parameters, i.e. if an attribute can be given as @Attr or @Attr("param"), $(D_PSYMBOL evalUDA) makes @Attr() from @Attr, but returns @Attr("param") as is.
T (or its type if it isn't a type already) should have a default constructor.