Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::saturate_cast(3)	      C++ Standard Libary	 std::saturate_cast(3)

NAME
       std::saturate_cast - std::saturate_cast

Synopsis
	  Defined in header <numeric>
	  template< class T, class U >		      (since C++26)
	  constexpr T saturate_cast( U x ) noexcept;

	  Converts  the	 value	x to a value of	type T,	clamping x between the
       minimum and
	  maximum values of type T.

	  It is	a compile-time error if	either T or U is not a signed  or  un-
       signed integer type
	  (including standard integer type and extended	integer	type).

Parameters
	  x - an integer value

Return value
	    * x, if x is representable as a value of type T. Otherwise,
	    *  either  the  largest or smallest	representable value of type T,
       whichever is
	      closer to	the value of x.

Exceptions
	  Throws no exceptions.

Notes
		Feature-test macro	   Value    Std		 Feature
	  __cpp_lib_saturation_arithmetic 202311L  (C++26)  Saturation	arith-
       metic

Possible implementation
	  See libstdc++	(gcc).

Example
	  Can be previewed on Compiler Explorer.

       // Run this code

	#include <cstdint>
	#include <limits>
	#include <numeric>

	int main()
	{
	    constexpr std::int16_t x1{696};

	    constexpr std::int8_t x2 = std::saturate_cast<std::int8_t>(x1);
	    static_assert(x2 ==	std::numeric_limits<std::int8_t>::max());

	    constexpr std::uint8_t x3 =	std::saturate_cast<std::uint8_t>(x1);
	    static_assert(x3 ==	std::numeric_limits<std::uint8_t>::max());

	    constexpr std::int16_t y1{-696};

	    constexpr std::int8_t y2 = std::saturate_cast<std::int8_t>(y1);
	    static_assert(y2 ==	std::numeric_limits<std::int8_t>::min());

	    constexpr std::uint8_t y3 =	std::saturate_cast<std::uint8_t>(y1);
	    static_assert(y3 ==	0);
	}

See also
	  bit_cast  reinterpret	 the object representation of one type as that
       of another
	  (C++20)  (function template)
	  clamp	   clamps a value between a pair of boundary values
	  (C++17)  (function template)
	  in_range checks if an	integer	value is in the	range of a given inte-
       ger type
	  (C++20)  (function template)

http://cppreference.com		  2024.06.10		 std::saturate_cast(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::saturate_cast&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help