Boost
C++ Libraries
...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
This version of Boost is under active development. You are currently in the develop branch. The current version is 1.92.0.
Clamp algorithm.
Marshall Clow
Suggested by olafvdspek in https://svn.boost.org/trac/boost/ticket/3215
namespace boost { namespace algorithm { template<typename T, typename Pred> BOOST_CXX14_CONSTEXPR T const & clamp(T const &, typename boost::type_identity< T >::type const &, typename boost::type_identity< T >::type const &, Pred); template<typename T> BOOST_CXX14_CONSTEXPR T const & clamp(const T & val, typename boost::type_identity< T >::type const & lo, typename boost::type_identity< T >::type const & hi); template<typename InputIterator, typename OutputIterator> BOOST_CXX14_CONSTEXPR OutputIterator clamp_range(InputIterator first, InputIterator last, OutputIterator out, typename std::iterator_traits< InputIterator >::value_type const & lo, typename std::iterator_traits< InputIterator >::value_type const & hi); template<typename Range, typename OutputIterator> BOOST_CXX14_CONSTEXPR boost::disable_if_c< boost::is_same< Range, OutputIterator >::value, OutputIterator >::type clamp_range(const Range &, OutputIterator, typename std::iterator_traits< typename boost::range_iterator< const Range >::type >::value_type const &, typename std::iterator_traits< typename boost::range_iterator< const Range >::type >::value_type const &); template<typename InputIterator, typename OutputIterator, typename Pred> BOOST_CXX14_CONSTEXPR OutputIterator clamp_range(InputIterator first, InputIterator last, OutputIterator out, typename std::iterator_traits< InputIterator >::value_type const & lo, typename std::iterator_traits< InputIterator >::value_type const & hi, Pred p); template<typename Range, typename OutputIterator, typename Pred> BOOST_CXX14_CONSTEXPR boost::disable_if_c< boost::is_same< Range, OutputIterator >::value, OutputIterator >::type clamp_range(const Range &, OutputIterator, typename std::iterator_traits< typename boost::range_iterator< const Range >::type >::value_type const &, typename std::iterator_traits< typename boost::range_iterator< const Range >::type >::value_type const &, Pred); } }