An idea to improve eponymous templates
Steven Schveighoffer
schveiguy at yahoo.com
Thu Apr 12 11:19:12 PDT 2012
On Thu, 12 Apr 2012 14:04:44 -0400, Timon Gehr <timon.gehr at gmx.ch> wrote:
> The general idea is useful, but there are issues.
>
> 'this' is the wrong keyword for the job. A class or struct instance is
> very different from a template instance and the proposed usage would
> clash with existing and useful ones. (assuming that it would work for
> symbol lookups in addition to declarations)
> 'template' or maybe 'scope' would be superior choices.
I think static is underused keyword, maybe it should have a dual meaning
here.
In all seriousness, I'm not sure template is right either. Scope sounds
like a very bad choice to me.
Are there any eponymous examples where the name of the template is the
first token? If so that would clash with declaring a new template.
I would find this weird:
template X(T)
{
alias T template;
template t {
...
}
}
It looks like you are using template as an alias to T, but the second
'template' inside is using it for creating a new template.
Also, consider this:
template X(T)
{
class template {
static typeof(this) create() { return new typeof(this);}
}
}
I don't think you could realistically use any keyword instead of
typeof(this), I really think the best solution is what we have, or use a
new keyword.
Another option is to do something like:
@eponymous template X(T) // changed from Y(T)
{
class Y { } // oops forgot to change this to X!
}
Error: template X did not declare eponymous symbol
At least changes would be loud errors.
-Steve
More information about the Digitalmars-d
mailing list