9#ifndef FORTRAN_COMMON_NUMERIC_LIMITS_H_
10#define FORTRAN_COMMON_NUMERIC_LIMITS_H_
21 static constexpr bool is_specialized{
false};
26#if defined(__SIZEOF_INT128__)
45 using T = __uint128_t;
47 static constexpr bool is_specialized{
true};
48 static constexpr bool is_signed{
false};
49 static constexpr bool is_integer{
true};
51 static constexpr T min() {
return static_cast<T
>(0); }
52 static constexpr T max() {
return ~static_cast<T>(0); }
53 static constexpr T lowest() {
return min(); }
60 static constexpr bool is_specialized{
true};
61 static constexpr bool is_signed{
true};
62 static constexpr bool is_integer{
true};
64 static constexpr T min() {
65 return static_cast<T
>(
static_cast<__uint128_t
>(1) << 127u);
67 static constexpr T max() {
68 return static_cast<T
>(~(
static_cast<__uint128_t
>(1) << 127u));
70 static constexpr T lowest() {
return min(); }
75 using type = __uint128_t;
79 using type = __uint128_t;
91 std::conditional_t<std::is_const_v<T>, std::add_const_t<Base>, Base>;
95 std::conditional_t<std::is_volatile_v<T>, std::add_volatile_t<C>, C>;
99template <
typename T,
typename =
void>
100inline constexpr bool has_make_unsigned_impl{
false};
102inline constexpr bool has_make_unsigned_impl<T,
103 std::void_t<typename make_unsigned_impl<std::remove_cv_t<T>>::type>>{
true};
119 typename std::conditional_t<detail::numeric_limits<T>::is_specialized &&
120 !std::numeric_limits<T>::is_specialized,
121 detail::numeric_limits<T>, std::numeric_limits<T>>;
129inline constexpr bool is_integral_v{
130 numeric_limits<T>::is_specialized && numeric_limits<T>::is_integer};
132inline constexpr bool is_signed_v{
133 numeric_limits<T>::is_specialized && numeric_limits<T>::is_signed};
135inline constexpr bool is_unsigned_v{
143 typename std::conditional_t<detail::has_make_unsigned_impl<T>,
Definition numeric-limits.h:24
Definition numeric-limits.h:88
Definition numeric-limits.h:19
Definition bit-population-count.h:20
typename std::conditional_t< detail::numeric_limits< T >::is_specialized && !std::numeric_limits< T >::is_specialized, detail::numeric_limits< T >, std::numeric_limits< T > > numeric_limits
Definition numeric-limits.h:118
constexpr bool is_arithmetic_v
Definition numeric-limits.h:127
typename std::conditional_t< detail::has_make_unsigned_impl< T >, detail::make_unsigned< T >, std::make_unsigned< T > > make_unsigned
Definition numeric-limits.h:142