An alias template parameter can be passed a literal value or enum value. An alias declaration cannot alias these values, this is inconsistent. Instead you have to use e.g. std.meta.Alias. Alias declarations should be able to alias values for ease of metaprogramming.
A separate tweak would be for variadic templates to require alias args... for a parameter sequence that isn't just types. T... without alias would then mean types only. This would help to distinguish the two cases from the template signature, and types only is the much more common case. It would also mean that variadic parameters are declared the same as non-variadic parameters, but with a ... ellipsis.
An alias template parameter can be passed a literal value or enum value. An alias declaration cannot alias these values, this is inconsistent. Instead you have to use e.g. std.meta.Alias. Alias declarations should be able to alias values for ease of metaprogramming.
A separate tweak would be for variadic templates to require
alias args...
for a parameter sequence that isn't just types.T...
withoutalias
would then mean types only. This would help to distinguish the two cases from the template signature, and types only is the much more common case. It would also mean that variadic parameters are declared the same as non-variadic parameters, but with a...
ellipsis.