DIP 1023--Resolution of Template Alias Formal Parameters in Template Functions--Community Review Round 1
jmh530
john.michael.hall at gmail.com
Wed Sep 11 09:58:58 UTC 2019
On Wednesday, 11 September 2019 at 02:02:58 UTC, Stefanos
Baziotis wrote:
> [snip]
>
> Nonetheless, thank you very much for pointing it out! Either
> it's part of this
> DIP or not.
>
> - Stefanos
No problem. ag0aep6g's comments above are also pretty spot on.
I'm not a compiler expert or anything, so I didn't go through
every little piece of the DIP initially in order to try to grok
how it worked. I don't have a good sense of how the compiler
currently resolves templates, so trying to understand how it
worked in this specific case seemed like a big hill to climb.
The reason why I was talking about the explicit template syntax
is because it provides a lot of flexibility.
When talking about Atila's concepts library above, the thing that
is in the back of my mind is something like isInputRange (he
provides an example in the Readme.md). One issue with passing an
input range to a lot of phobos functions is that if you pass
something that isn't an input range the error message isn't
specific about why it isn't an input range. For instance, did you
forget to define popFront? The concepts library helps provide
better error messages in this case. However, it currently
requires you to use @models at the top of the struct in order to
check this information. This requires the user to put models UDA
before their own struct, rather than this happening at the point
of the function. If we were able to do something like below, then
the user does not need to put it on their own structs. I think
that would make the concepts library much more powerful.
template InputRange(T) {
import concepts: models, isInputRange;
static assert(models!(Foo, isInputRange));
alias InputRange = T;
}
void useInputRange(T)(InputRange!T foo) {
}
More information about the Digitalmars-d
mailing list