On 24 July 2014 22:03, John Colvin via Digitalmars-d < [email protected]> wrote:
> On Thursday, 24 July 2014 at 11:39:13 UTC, Manu via Digitalmars-d wrote: Although... the more I think about it, the more I wonder why it matters if >> the syntax is ambiguous when the name is taken in isolation, that never >> actually happens... >> Why can't it just mean 'either the template, or the default arg >> instantiation', and be resolved when it's actually used? >> Is it possible for templates or types to both appear in the same context >> and create an actual ambiguity? What would that expression look like? >> The only place I can imagine a conflict could occur would be within an >> is() >> expression, but I'm not sure... can a uninstantiated template be used in >> an >> is() expression where a type would also be a meaningful fit? >> >> Generally, templates do this: >> T!() >> And types do this: >> T var; >> >> It's clear syntactically from 'T!()' that T is not a default args >> instantiation of T, because it's involved in a template instantiation >> expression. >> It's also clear from 'T var' that T is not a template, because a variable >> needs to have a type. >> > > Seeing as templates can resolve to other templates, mixin templates, > values, functions and types, the situation is complicated. > This is just FUD without any case for consideration. All of those different resolutions imply different syntactic contexts. I'm still not sure of a case where a genuine ambiguity arises.
