On Thu, Sep 13, 2018 at 06:32:54PM -0400, Nick Sabalausky (Abscissa) via 
Digitalmars-d wrote:
> On 09/11/2018 09:06 AM, Steven Schveighoffer wrote:
> > 
> > Then I found the true culprit was isForwardRange!R. This led me to
> > requestion my sanity, and finally realized I forgot the empty
> > function.
> 
> This is one reason template-based interfaces like ranges should be
> required to declare themselves as deliberately implementing said
> interface. Sure, we can tell people they should always `static
> assert(isForwardRage!MyType)`, but that's coding by convention and
> clearly isn't always going to happen.

Yeah, I find myself writing `static assert(isInputRange!MyType)` all the
time these days, because you just never can be too sure you didn't screw
up and cause things to mysteriously fail, even though they shouldn't.

Although I used to be a supporter of free-form sig constraints (and
still am to some extent) and a hater of Concepts like in C++, more and
more I'm beginning to realize the wisdom of Concepts rather than
free-for-all ducktyping.  It's one of those things that work well in
small programs and fast, one-shot projects, but don't generalize so well
as you scale up to larger and larger projects.


T

-- 
A program should be written to model the concepts of the task it performs 
rather than the physical world or a process because this maximizes the 
potential for it to be applied to tasks that are conceptually similar and, more 
important, to tasks that have not yet been conceived. -- Michael B. Allen

Reply via email to