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 <> 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

Boost list run by bdawes at, gregod at, cpdaniel at, john at