allSatisfy could use some constraints

Jonathan M Davis jmdavisProg at gmx.com
Thu Sep 22 17:12:36 PDT 2011


On Thursday, September 22, 2011 17:03 Andrej Mitrovic wrote:
> On 9/23/11, Jonathan M Davis <jmdavisProg at gmx.com> wrote:
> > Though given that allSatisfy!(isNumeric, int, short) will work with
> > std.traits.isNumeric and not std.string.isNumeric, I suspect that a
> > template constraint could be added which would fix the problem simply by
> > checking whether the compilation succeeds or not with the given
> > arguments.
> 
> I'm not sure if allSatisfy was meant to be used with regular
> functions, it's used with templates and types (hence it's in
> typetuple). I think an alternative "all" template for runtime
> arguments was already proposed.

Yeah, but functions can be used in template constraints and the like too, so 
it may be valid. I don't know. I'd have to look at it in more detail.

> My problem is not the name clashes but the fact that the error message
> is in the body of the allSatisfy template, and this is exactly where
> constraints come in handy. It took me a while before I figured out
> that std.string had the same function name, but I'm using an alias now
> to remedy this.

Yeah. In general, templates really should have template constraints on them 
(_especially_ public ones), and there are several in Phobos which forward to 
other templates that don't have template constraints on them when they should. 
And it appears that allSatisfy is one of them.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list