Boost logo

Boost :

Subject: Re: [boost] review request: addition to type_traits library of is_less_comparable<T, U> and others
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2009-10-08 11:37:32


Frédéric Bron wrote:
> I would like to propose to your review the following addition to the
> type_traits library (at
> https://svn.boost.org/trac/boost/browser/sandbox/type_traits
> and http://dl.free.fr/tK0BwIzYy).
>
> The purpose of the addition is to add type traits to detect if types T and U
> are comparable in the sens of <, <=, >, >=, == or != operators, i.e. if
> t<u has a sens when t is of type T and u of type U (same for <=, >, >=, ==,
> !=).
>
> The following traits are added:
>
> is_equal_to_comparable<T,U>
> is_greater_comparable<T,U>
> is_greater_equal_comparable<T,U>
> is_less_comparable<T,U>
> is_less_equal_comparable<T,U>
> is_not_equal_to_comparable<T,U>
>
> The names are based on the corresponding names of the standard
> template library (<functional> header, section 20.3.3 of the
> standard).
>
> The code has the following properties:
> * returns true if t<u is meaningful and returns a value convertible to bool
> * returns false if t<u is meaningless.
> * fails with compile time error if t<u is meaningful and returns void
> (a possibility to avoid compile time error would be to return true
> with an operator, trick but this has little sens as returning false
> would be better)

Is it reasonable to additionally verify the returned type? IMO, such
kind of traits should not make assumptions about the operators meaning,
they should merely show whether the comparison expression is valid. Thus
there also should not be a fails-to-compile case.


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