Now that's a DIP that could use some love

jmh530 john.michael.hall at gmail.com
Thu Sep 17 23:10:23 UTC 2020


On Thursday, 17 September 2020 at 22:29:50 UTC, jmh530 wrote:
> On Thursday, 17 September 2020 at 21:55:22 UTC, Andrei 
> Alexandrescu wrote:
>> [snip]
>
> I don't think the people who disagree and instead think that 
> the situation is good. HS Teoh recommended an alternative 
> approach that may provide simpler error reports. His approach 
> would effectively widen the template constraints to something 
> like just isInputRange. One could still make an argument about 
> isInputRange not provided valuable error reporting, but that is 
> one thing that Atila's concepts library attempts to fix.

I also want to draw some attention to another possible solution 
to this morass, which is enhancing template alias deduction. 
Someone was working on a DIP for this, but their approach became 
tricky in the more general case. Ideally something like below 
could work where the call to foo(y) would produce the result from 
the static assert. In other words, instantiating foo with T 
should cause ArrayType(T) to be instantiated, which could either 
produce the relevant alias that would be used for deduction or 
the result of the static assert appears before any additional 
matching would go on.

A similar template alias for InputRange (instead of isInputRange) 
would basically return the type if it passes the relevant checks 
and a detailed error message otherwise.

I would think this would somehow fit in with Stefan Koch's work 
on type/alias functions...

template ArrayType(T)
{
     import std.traits: isDynamicArray;
     static if (isDynamicArray!T) {
         alias ArrayType = T;
     } else {
         static assert(0, "T is not a valid ArrayType");
     }
}

void foo(T)(ArrayType!T x) {
  	
}

void main()
{
     int[] x;
     foo(x); //does not currently compile
     int y;
     foo(y); //does not currently compile, shouldn't compile
}


More information about the Digitalmars-d mailing list