On Thursday, 30 July 2015 at 19:12:27 UTC, jmh530 wrote:
On Thursday, 30 July 2015 at 10:40:59 UTC, Atila Neves wrote:
[...]

I might be overthinking this.

You would still need to define something for checkInputRange. Are you thinking something simple like

template checkInputRange(R)
{
    enum bool checkInputRange = isInputRange!R;
}

In this case, the error message is still referring to checkInputRange instead of isInputRange. So the user would still need to refer to that and see what that functions conditions are. Alternately, you could write checkInputRange to provide the user information about which functions are not implemented (like no pop, no popFront, no empty). That seems more difficult, but would be convenient for the user.

The benefit of something simple like

template satisfies_alt(alias Constraint, R) {
    static assert(Constraint!R);
}

is that at least you don't have to write extra functions. You only need isInputRange. The downside is that the error message references Constraint instead of isInputRange. That's less intuitive.

Check the out the PR I mentioned:

https://github.com/D-Programming-Language/phobos/pull/3520

The idea would be to define a similar check function for each constraint. Without it, you don't get the nice error messages.

Atila

Reply via email to