#ifndef ABSL_RANDOM_INTERNAL_TRAITS_H_
#define ABSL_RANDOM_INTERNAL_TRAITS_H_
#include <cstdint>
#include <limits>
#include <type_traits>
#include "absl/base/config.h"
#include "absl/numeric/bits.h"
#include "absl/numeric/int128.h"
namespace absl {
ABSL_NAMESPACE_BEGIN
namespace random_internal {
template <typename A, typename B>
class is_widening_convertible { … };
template <typename T>
struct IsIntegral : std::is_integral<T> { … };
template <>
struct IsIntegral<absl::int128> : std::true_type { … };
template <>
struct IsIntegral<absl::uint128> : std::true_type { … };
template <typename T>
struct MakeUnsigned : std::make_unsigned<T> { … };
template <>
struct MakeUnsigned<absl::int128> { … };
template <>
struct MakeUnsigned<absl::uint128> { … };
template <typename T>
struct IsUnsigned : std::is_unsigned<T> { … };
template <>
struct IsUnsigned<absl::int128> : std::false_type { … };
template <>
struct IsUnsigned<absl::uint128> : std::true_type { … };
template <size_t N>
struct unsigned_bits;
template <>
struct unsigned_bits<8> { … };
template <>
struct unsigned_bits<16> { … };
template <>
struct unsigned_bits<32> { … };
template <>
struct unsigned_bits<64> { … };
template <>
struct unsigned_bits<128> { … };
struct U256 { … };
template <>
struct unsigned_bits<256> { … };
template <typename IntType>
struct make_unsigned_bits { … };
template <typename T>
int BitWidth(T v) { … }
}
ABSL_NAMESPACE_END
}
#endif