https://issues.dlang.org/show_bug.cgi?id=13361
--- Comment #1 from Kenji Hara <[email protected]> --- But UDA can take zero-length tuple, which is finally reduced to @(). alias TypeTuple(T...) = T; alias args = TypeTuple!(); // zero-length tuple void foo() {} @args void bar() {} @() void baz() {} pragma(msg, __traits(getAttributes, foo).length); // prints 0 pragma(msg, __traits(getAttributes, bar).length); // prints 0 pragma(msg, __traits(getAttributes, baz).length); // prints 0 Yes, it is useless, but I don't think it's invalid syntax. --
