Feedback on Átila's Vision for D

Paul Backus snarwin at
Wed Oct 16 13:07:30 UTC 2019

On Wednesday, 16 October 2019 at 06:53:37 UTC, Sebastiaan Koppe 
> Surely it would be possible to define a partial ordering over 
> our template constraints.
> Since isRandomAccessRange!R includes isForwardRange!R (which 
> includes isInputRange!R), the compiler should be able to 
> determine that isRandomAccessRange!R is more strict than 
> isInputRange!R.
> If anything, you could simply count the && and the ||'s. That 
> is, A && B > B. That ought to be a simple AST+lookup operation. 
> Right?

Template bodies may be arbitrarily complex, and determining 
whether one template predicate implies another is 
halting-equivalent in the general case.

The only way you can do this kind of analysis is if you define, 
in the language spec, a restricted subset of templates to apply 
it to--for example, enum templates whose body consists of a 
single boolean expression.

Personally, I find that kind of special-case handling a bit 
unprincipled, so it wouldn't be my first choice, but it's 
probably the shortest path from where we are now to partial 
ordering for template constraints.

More information about the Digitalmars-d mailing list