**Section:** 27.8.10 [alg.clamp] **Status:** C++17
**Submitter:** Martin Moene **Opened:** 2016-03-23 **Last modified:** 2017-07-30 20:15:43 UTC

**Priority: **0

**View all issues with** C++17 status.

**Discussion:**

In Jacksonville (2016), P0025R0 was voted in instead of the intended P0025R1. This report contains the necessary mending along with two other improvements.

This report:

adds the precondition that misses from P0025R0 but is in P0025R1,

corrects the returns: specification that contains an extraneous condition,

replaces the now superfluous remark with a note on usage of clamp with

`float`or`double`.

Thanks to Carlo Assink and David Gaarenstroom for making us aware of the extraneous condition in the returns: specification and for suggesting the fix and to Jeffrey Yasskin for suggesting to add a note like p3.

**Previous resolution [SUPERSEDED]:**

Edit 27.8.10 [alg.clamp] as indicated:

template<class T> constexpr const T& clamp(const T& v, const T& lo, const T& hi); template<class T, class Compare> constexpr const T& clamp(const T& v, const T& lo, const T& hi, Compare comp);-1-

Requires: The value ofloshall be no greater thanhi. For the first form, typeTshall beLessThanComparable(Table 18).-2-

Returns:loifvis less thanlo,hiifhiis less thanv, otherwisev~~The larger value of~~.vandloifvis smaller thanhi, otherwise the smaller value ofvandhi-3-

Note: If NaN is avoided,~~Remarks~~Tcan befloatordouble~~Returns the first argument when it is equivalent to one of the boundary arguments~~.-4-

Complexity: At most two comparisons.

*[2016-05 Issues Telecon]*

Reworded p3 slightly.

**Proposed resolution:**

This wording is relative to N4582.

Edit 27.8.10 [alg.clamp] as indicated:

template<class T> constexpr const T& clamp(const T& v, const T& lo, const T& hi); template<class T, class Compare> constexpr const T& clamp(const T& v, const T& lo, const T& hi, Compare comp);

-1-

*Requires*: The value of`lo`shall be no greater than`hi`. For the first form, type`T`shall be`LessThanComparable`(Table 18).-2-

*Returns*:`lo`if`v`is less than`lo`,`hi`if`hi`is less than`v`, otherwise`v`~~The larger value of~~.`v`and`lo`if`v`is smaller than`hi`, otherwise the smaller value of`v`and`hi`-3-

*Note*: If NaN is avoided,~~Remarks~~`T`can be a floating point type~~Returns the first argument when it is equivalent to one of the boundary arguments~~.-4-

*Complexity*: At most two comparisons.