Namensräume
Varianten

std::in_range

Aus cppreference.com
<tbody> </tbody>
definiert in Header <utility>
template< class R, class T > constexpr bool in_range( T t ) noexcept;

Der Rückgabewert ist true, falls der Wert t im Wertebereich von R liegt, d.h. falls t nach R ohne Verluste konvertiert werden kann.

Es liegt ein Fehler zur Kompilationszeit vor, falls weder T noch R ein vorzeichenbehafteter oder vorzeichenloser Ganzzahlentyp ist. Dieses schließt sowohl Standard- als auch erweiterte Ganzzahltypen ein.

Parameter

t - Wert, der getestet werden soll

Rückgabewert

true falls der Wert t durch den Typ R verlustfrei dargestellt werden kann, false anderenfalls.

Mögliche Implementierung

template< class R, class T >
constexpr bool in_range( T t ) noexcept
{
    return std::cmp_greater_equal(t, std::numeric_limits<R>::min()) &&
        std::cmp_less_equal(t, std::numeric_limits<R>::max());
}

Anmerkungen

Diese Funktion kann nicht benutzt werden für enums und Zeichen ({ltt|cpp/types/byte|std::byte}}), char, char8_t, char16_t, char32_t, wchar_t and bool).

Feature testing macro: __cpp_lib_integer_comparison_functions

Beispiele

#include <utility>
#include <iostream>

int main()
{
    std::cout << std::boolalpha;

    std::cout << std::in_range<std::size_t>(-1) << '\n';
    std::cout << std::in_range<std::size_t>(42) << '\n';
}

Output:

false
true

Referenzen

gibt den kleineren der beiden Werte zurück
(niebloid) [edit]
gibt den größeren der beiden Werte zurück
(niebloid) [edit]
spannt einen Wert zwischen zwei Randwerten ein
(niebloid) [edit]
(C++20)
Funktion zur linearen Interpolation
(Funktion) [edit]