max() in phobos, and English logic operators

Bill Baxter dnewsgroup at
Wed Nov 8 15:29:31 PST 2006

Jarrett Billingsley wrote:
> "David Qualls" <davidlqualls at> wrote in message 
> news:eirqai$he$1 at
>> So, is it possible to use templates to define generic binary
>> operators; like 'and' and 'or', or a unary operator like 'not'?
> Not like the way you'd use the iso646 ones.  It'd be really unnatural:
> if(not(and(a, or(b, c))))
>     ...

I'm a Lisp user you insensitive clod!  That looks perfectly natural to 
me!  :-)

> T max(T)(T a, T b)
> {
>     return (a > b) ? a : b;
> }
> Which is pretty readable to me, and probably covers most of the use cases. 
> Most of that conversion stuff in Sean's implementation is probably type 
> trait stuff which would best belong in std.traits (when it comes out).. 

But it's very annoying in C++.

    float x = 17;
    std::max(x,0); // error! which max do you mean - float or int?
    std::max(x,0.0); // error! which max do you mean - float or double?
    std::max(x,0.0f); // ok, both float

Especially annoying for containers parameterized by numeric type. Then 
you don't know what to use for the literal you're comparing against, so 
you've got to use a cast.

    T x = 17;  // could be float,double,real,int etc
    std::max(x, cast(T)0); // ugh.


More information about the Digitalmars-d-learn mailing list