Boost logo

Boost :

Subject: Re: [boost] [Review:Algorithms] Order of args to clamp
From: Dave Abrahams (dave_at_[hidden])
Date: 2011-09-24 22:06:36


on Sat Sep 24 2011, Andrew Sutton <asutton.list-AT-gmail.com> wrote:

>> template< class T, class L, class U >
>
>> typename common_type< T const &, L const &, U const & >::type
>> clamp(T const & x, L const & lower, U const & upper)
>> { return x < lower ? lower : upper < x ? upper : x; }
>>
>> for the use of common_type (assuming it accepts 3 parameters, which I seem
>> to remember it did; if not, just nest); and something like
>
> Can we please not define algorithms this way? It may be possible, but
> that doesn't mean its a good idea. I don't know how you could possibly
> prove that the algorithm preserves ordering (<) when the algorithm
> includes 5 possibly different types.
>
> Thats not strictly true. I do know how you can prove it preserves
> ordering, but I'm not going to encourage the style.
>
> Define it in terms of a single type and let conversions happen at the
> call type.

+1. The point is that you probably don't really understand what it
means to order different types, and the theorems required to make it
semantically well-founded are complicated enough that users of the
algorithms won't be able to know whether they're using it properly.

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk