On 07/30/2016 09:21 PM, Jonathan M Davis via Digitalmars-d wrote:
I think that Walter's answer in those bug reports is pretty clear. An alias
parameter aliases a symbol. Basic types are keywords, not symbols, so they
can't be passed as an argument to an alias parameter.
As far as I see, he just says that it works as intended. But he doesn't
give a rationale as for why it's intended to work like that. What's
gained by rejecting basic types in alias parameters? It's surprising
behavior for seemingly no good reason.
And I confess that I don't know why you'd even want to.
Phobos could make good use of it. For example, many isFoo template in
std.traits would become a bit nicer. This kind of workaround is all over
the place:
template isCallable(T...) if (T.length == 1)
{
/* use T[0] */
}
With a "fixed" alias parameter, that would be:
template isCallable(alias T)
{
/* use T */
}