Getting the overload set of a template
Alex
sascha.orlov at gmail.com
Sat Apr 21 21:10:29 UTC 2018
On Saturday, 21 April 2018 at 19:51:05 UTC, Simen Kjærås wrote:
> On Saturday, 21 April 2018 at 11:23:33 UTC, Alex wrote:
>> So, do you mean, that the constraint belongs to the interface
>> of a template?
>
> Not necessarily - it depends on what you want to achieve. The
> only thing I mean is that the code clearly defines two
> templates in one case (and chooses which template to
> instantiate based on the arguments), and one template in the
> other (and chooses the contents of that template based on the
> arguments).
This is wrong, at least as I understand this:
Lowering rules apply. These rules define a set of semantic
equivalent constructs. I expect all semantic equivalent
constructs to be handled equivalent.**
> Sure, the end result may be similar*, but how it works in the
> language is clearly defined, and different between the two
> cases.
>
> *In this case, there are important differences - in the first
> case the template itself is marked with a UDA, in the second
> the enum member is.
This is a good point. But you won't be able to get the UDA from
an uninstantiated template will you? If you will, then, I'm
wrong, I think...
** So my point is: If you can transform some construct into
another one by lowering rules, than
- either: you can't define an overload
- or: you can define same overloads on both forms.
[1]
> In the first case foo!"c" will fail to instantiate, in the
> second it won't.
This is due, I didn't add
´´´
else
{
assert(0);
}
´´´
sorry for this.
[1]
http://www.drdobbs.com/architecture-and-design/so-you-want-to-write-your-own-language/240165488?pgno=2
More information about the Digitalmars-d-learn
mailing list