Boost logo

Boost :

Subject: Re: [boost] [Review:Algorithms] Order of args to clamp
From: Phil Endecott (spam_from_boost_dev_at_[hidden])
Date: 2011-09-25 07:18:35


Hi Andrew,

Andrew Sutton 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.

Consider the case where the types differ only in some attribute like
their allocator that doesn't change the behaviour of comparisons.

Yes, it may be possible to convert to a common type - but that will
involve extra work at runtime. If you need to prove the correctness of
something and this makes that difficult for you, you're welcome to use
a subset of the functionality.

Regards, Phil.


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