Getting the overload set of a template

Alex sascha.orlov at gmail.com
Mon Apr 23 13:32:49 UTC 2018


On Monday, 23 April 2018 at 10:57:59 UTC, Simen Kjærås wrote:
>> There is no official definition. That's because some natural 
>> rewrite rules are implied, which are very general, I assume...
>
> How official do you want it to be? That's the only definition 
> in common use by others in the context of compilers.

Stating the existence of rewriting rules is a complex thing. They 
is no place in the docu (which I could find until now) where they 
are defined. Therefore, I rely on something which is common.
https://en.wikipedia.org/wiki/Natural_transformation

We can discuss, whether a template is a functor, but I think this 
would go beyond the scope of this thread.

You mentioned a limited set of lowerings, defined by the 
language. Where can I find them?  I'm very interested in that.

> There is no template rewriting taking place in the language 
> today - that seems to be a feature you are arguing for.

Semantic rewriting is not something which one can take control 
of. Either you have semantically equal constructs or not.

> getOverloads should return the overloads of a template as they 
> are defined in the language today.

This is the topic of discussion. I argue, that getOverloads can 
(so far) act only on functions, because only there the term 
overload is well defined. I see, that it could be defined on 
templates too, but not in the way you do.

> Template overloads are mentioned in the D spec[0], and are 
> clearly a real thing that it's useful to be able to manipulate.

Yes. But using the term "overload" for templates with the same 
name does not justify to wrongly apply existing features to more 
abstract objects. This is what you try to do by using 
getOverloads with templates.

>
> You seem to be arguing against a feature on the basis that if 
> the language were significantly different from what it is, the 
> feature would be confusing. The language isn't that way, so the 
> feature isn't confusing in that way.

Well, as we both saw with the pragma output, the language is 
exactly that way I'm describing it. New getOverload functionality 
would introduce a new constraint in comparison to the current 
state.

>
> Having getOverloads return template overloads solves a real 
> issue right now, and would be useful even if your suggested 
> change were implemented (though the behavior would be slightly 
> different).

What I'm saying is: it would be useful only then, if my suggested 
change were implemented. Otherwise, it is a new constraint and 
not a feature.

> [0]: https://dlang.org/concepts.html


More information about the Digitalmars-d-learn mailing list