Feedback on Átila's Vision for D

jmh530 john.michael.hall at
Tue Oct 15 17:50:52 UTC 2019

On Tuesday, 15 October 2019 at 16:39:47 UTC, Paul Backus wrote:
> [snip]
> The one advantage C++ concepts have over D's template 
> predicates is that they're transparent to the compiler. As a 
> result, the compiler is able to determine a partial order on 
> template constraints [1], and use that order to resolve 
> overloads (just like D does with regular function overloads 
> [2]). D can't do this, so we're stuck writing awkward things 
> like this:
> auto myAlgorithm(R)(R r) if (isInputRange!R && 
> !isRandomAccessRange!R) { ... }
> auto myAlgorithm(R)(R r) if (isRandomAccessRange!R) { ... }
> .[snip]

That's an interesting point. The problem is the template 
constraints aren't considered for the overloading, right? 
However, if they were expressed as in something like below

auto myAlgorithm(T)(InputRange!T r) { ... }
auto myAlgorithm(T)(RandomAccessRange!T r) { ... }

then I presume that it wouldn't be an issue. You might find DIP 
1023 [1] interesting. One of the purposes of DIP1023 is to allow 
for template aliases to be used like types in functions. One of 
the arguments against DIP1023 is that you can simply use template 
constraints to do the same thing. However, your example shows 
that template constraints might get complicated in some instances.


More information about the Digitalmars-d mailing list