alias and UDAs

Stanislav Blinov via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu May 11 03:57:22 PDT 2017


On Thursday, 11 May 2017 at 10:39:03 UTC, Andre Pany wrote:
> Hi,
>
> in this example, both asserts fails. Is my assumption right, 
> that UDA on alias have no effect? If yes, I would like to see a 
> compiler warning.
>
> But anyway, I do not understand why the second assertion fails. 
> Are UDAs on arrays not allowed?
>
> import std.traits: hasUDA;
>
> enum Flattened;
>
> struct Foo
> {
> 	int bar;
> }
>
> @Flattened alias FooList = Foo[];
>
> struct Baz
> {
> 	FooList fooList1;
> 	@Flattened FooList[] fooList2;
> }
>
> void main()
> {	
> 	Baz baz;
> 	static assert(hasUDA!(baz.fooList1, "Flattened")); // => false
> 	static assert(hasUDA!(baz.fooList2, "Flattened")); // => false
> }
>
> Kind regards
> André

It should've been

alias FooList = @Flattened Foo[];

which will generate a compile-time error (UDAs not allowed for 
alias declarations).

And then:

static assert(hasUDA!(baz.fooList2, Flattened));

No quotes, since Flattened is an enum, not a string


More information about the Digitalmars-d-learn mailing list