[libc++] Refactor signed/unsigned integer traits (#142750)
This patch does a few things: - `__libcpp_is_signed_integer` and `__libcpp_is_unsigned_integer` are refactored to be variable templates instead of class templates. - the two traits are merged into a single header `<__type_traits/integer_traits.h>`. - `__libcpp_signed_integer`, `__libcpp_unsigned_integer` and `__libcpp_integer` are moved into the same header. - The above mentioned concepts are renamed to `__signed_integer`, `__unsigned_integer` and `__signed_or_unsigned_integer` respectively.
This commit is contained in:
@@ -11,9 +11,9 @@
|
||||
// Concept helpers for the internal type traits for the fundamental types.
|
||||
|
||||
// template <class _Tp>
|
||||
// concept __libcpp_integer;
|
||||
// concept __signed_or_unsigned_integer;
|
||||
|
||||
#include <concepts>
|
||||
#include <__type_traits/integer_traits.h>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
@@ -24,40 +24,40 @@ enum SomeEnum {};
|
||||
enum class SomeScopedEnum {};
|
||||
|
||||
// Unsigned
|
||||
static_assert(std::__libcpp_integer<unsigned char>);
|
||||
static_assert(std::__libcpp_integer<unsigned short int>);
|
||||
static_assert(std::__libcpp_integer<unsigned int>);
|
||||
static_assert(std::__libcpp_integer<unsigned long int>);
|
||||
static_assert(std::__libcpp_integer<unsigned long long int>);
|
||||
static_assert(std::__libcpp_integer<unsigned short int>);
|
||||
static_assert(std::__signed_or_unsigned_integer<unsigned char>);
|
||||
static_assert(std::__signed_or_unsigned_integer<unsigned short int>);
|
||||
static_assert(std::__signed_or_unsigned_integer<unsigned int>);
|
||||
static_assert(std::__signed_or_unsigned_integer<unsigned long int>);
|
||||
static_assert(std::__signed_or_unsigned_integer<unsigned long long int>);
|
||||
static_assert(std::__signed_or_unsigned_integer<unsigned short int>);
|
||||
#if _LIBCPP_HAS_INT128
|
||||
static_assert(std::__libcpp_integer<__uint128_t>);
|
||||
static_assert(std::__signed_or_unsigned_integer<__uint128_t>);
|
||||
#endif
|
||||
// Signed
|
||||
static_assert(std::__libcpp_integer<signed char>);
|
||||
static_assert(std::__libcpp_integer<short int>);
|
||||
static_assert(std::__libcpp_integer<int>);
|
||||
static_assert(std::__libcpp_integer<long int>);
|
||||
static_assert(std::__libcpp_integer<long long int>);
|
||||
static_assert(std::__libcpp_integer<short int>);
|
||||
static_assert(std::__signed_or_unsigned_integer<signed char>);
|
||||
static_assert(std::__signed_or_unsigned_integer<short int>);
|
||||
static_assert(std::__signed_or_unsigned_integer<int>);
|
||||
static_assert(std::__signed_or_unsigned_integer<long int>);
|
||||
static_assert(std::__signed_or_unsigned_integer<long long int>);
|
||||
static_assert(std::__signed_or_unsigned_integer<short int>);
|
||||
#if _LIBCPP_HAS_INT128
|
||||
static_assert(std::__libcpp_integer<__int128_t>);
|
||||
static_assert(std::__signed_or_unsigned_integer<__int128_t>);
|
||||
#endif
|
||||
// Non-integer
|
||||
static_assert(!std::__libcpp_integer<bool>);
|
||||
static_assert(!std::__libcpp_integer<char>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<bool>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<char>);
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
static_assert(!std::__libcpp_integer<wchar_t>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<wchar_t>);
|
||||
#endif
|
||||
static_assert(!std::__libcpp_integer<char8_t>);
|
||||
static_assert(!std::__libcpp_integer<char16_t>);
|
||||
static_assert(!std::__libcpp_integer<char32_t>);
|
||||
static_assert(!std::__libcpp_integer<float>);
|
||||
static_assert(!std::__libcpp_integer<double>);
|
||||
static_assert(!std::__libcpp_integer<long double>);
|
||||
static_assert(!std::__libcpp_integer<void>);
|
||||
static_assert(!std::__libcpp_integer<int*>);
|
||||
static_assert(!std::__libcpp_integer<unsigned int*>);
|
||||
static_assert(!std::__libcpp_integer<SomeObject>);
|
||||
static_assert(!std::__libcpp_integer<SomeEnum>);
|
||||
static_assert(!std::__libcpp_integer<SomeScopedEnum>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<char8_t>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<char16_t>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<char32_t>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<float>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<double>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<long double>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<void>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<int*>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<unsigned int*>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<SomeObject>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<SomeEnum>);
|
||||
static_assert(!std::__signed_or_unsigned_integer<SomeScopedEnum>);
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
// Concept helpers for the internal type traits for the fundamental types.
|
||||
|
||||
// template <class _Tp>
|
||||
// concept __libcpp_signed_integer;
|
||||
// concept __signed_integer;
|
||||
|
||||
#include <concepts>
|
||||
#include <__type_traits/integer_traits.h>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
@@ -24,40 +24,40 @@ enum SomeEnum {};
|
||||
enum class SomeScopedEnum {};
|
||||
|
||||
// Unsigned
|
||||
static_assert(!std::__libcpp_signed_integer<unsigned char>);
|
||||
static_assert(!std::__libcpp_signed_integer<unsigned short int>);
|
||||
static_assert(!std::__libcpp_signed_integer<unsigned int>);
|
||||
static_assert(!std::__libcpp_signed_integer<unsigned long int>);
|
||||
static_assert(!std::__libcpp_signed_integer<unsigned long long int>);
|
||||
static_assert(!std::__libcpp_signed_integer<unsigned short int>);
|
||||
static_assert(!std::__signed_integer<unsigned char>);
|
||||
static_assert(!std::__signed_integer<unsigned short int>);
|
||||
static_assert(!std::__signed_integer<unsigned int>);
|
||||
static_assert(!std::__signed_integer<unsigned long int>);
|
||||
static_assert(!std::__signed_integer<unsigned long long int>);
|
||||
static_assert(!std::__signed_integer<unsigned short int>);
|
||||
#if _LIBCPP_HAS_INT128
|
||||
static_assert(!std::__libcpp_signed_integer<__uint128_t>);
|
||||
static_assert(!std::__signed_integer<__uint128_t>);
|
||||
#endif
|
||||
// Signed
|
||||
static_assert(std::__libcpp_signed_integer<signed char>);
|
||||
static_assert(std::__libcpp_signed_integer<short int>);
|
||||
static_assert(std::__libcpp_signed_integer<int>);
|
||||
static_assert(std::__libcpp_signed_integer<long int>);
|
||||
static_assert(std::__libcpp_signed_integer<long long int>);
|
||||
static_assert(std::__libcpp_signed_integer<short int>);
|
||||
static_assert(std::__signed_integer<signed char>);
|
||||
static_assert(std::__signed_integer<short int>);
|
||||
static_assert(std::__signed_integer<int>);
|
||||
static_assert(std::__signed_integer<long int>);
|
||||
static_assert(std::__signed_integer<long long int>);
|
||||
static_assert(std::__signed_integer<short int>);
|
||||
#if _LIBCPP_HAS_INT128
|
||||
static_assert(std::__libcpp_signed_integer<__int128_t>);
|
||||
static_assert(std::__signed_integer<__int128_t>);
|
||||
#endif
|
||||
// Non-integer
|
||||
static_assert(!std::__libcpp_signed_integer<bool>);
|
||||
static_assert(!std::__libcpp_signed_integer<char>);
|
||||
static_assert(!std::__signed_integer<bool>);
|
||||
static_assert(!std::__signed_integer<char>);
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
static_assert(!std::__libcpp_signed_integer<wchar_t>);
|
||||
static_assert(!std::__signed_integer<wchar_t>);
|
||||
#endif
|
||||
static_assert(!std::__libcpp_signed_integer<char8_t>);
|
||||
static_assert(!std::__libcpp_signed_integer<char16_t>);
|
||||
static_assert(!std::__libcpp_signed_integer<char32_t>);
|
||||
static_assert(!std::__libcpp_signed_integer<float>);
|
||||
static_assert(!std::__libcpp_signed_integer<double>);
|
||||
static_assert(!std::__libcpp_signed_integer<long double>);
|
||||
static_assert(!std::__libcpp_signed_integer<void>);
|
||||
static_assert(!std::__libcpp_signed_integer<int*>);
|
||||
static_assert(!std::__libcpp_signed_integer<unsigned int*>);
|
||||
static_assert(!std::__libcpp_signed_integer<SomeObject>);
|
||||
static_assert(!std::__libcpp_signed_integer<SomeEnum>);
|
||||
static_assert(!std::__libcpp_signed_integer<SomeScopedEnum>);
|
||||
static_assert(!std::__signed_integer<char8_t>);
|
||||
static_assert(!std::__signed_integer<char16_t>);
|
||||
static_assert(!std::__signed_integer<char32_t>);
|
||||
static_assert(!std::__signed_integer<float>);
|
||||
static_assert(!std::__signed_integer<double>);
|
||||
static_assert(!std::__signed_integer<long double>);
|
||||
static_assert(!std::__signed_integer<void>);
|
||||
static_assert(!std::__signed_integer<int*>);
|
||||
static_assert(!std::__signed_integer<unsigned int*>);
|
||||
static_assert(!std::__signed_integer<SomeObject>);
|
||||
static_assert(!std::__signed_integer<SomeEnum>);
|
||||
static_assert(!std::__signed_integer<SomeScopedEnum>);
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
// Concept helpers for the internal type traits for the fundamental types.
|
||||
|
||||
// template <class _Tp>
|
||||
// concept __libcpp_unsigned_integer;
|
||||
// concept __unsigned_integer;
|
||||
|
||||
#include <concepts>
|
||||
#include <__type_traits/integer_traits.h>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
@@ -24,40 +24,40 @@ enum SomeEnum {};
|
||||
enum class SomeScopedEnum {};
|
||||
|
||||
// Unsigned
|
||||
static_assert(std::__libcpp_unsigned_integer<unsigned char>);
|
||||
static_assert(std::__libcpp_unsigned_integer<unsigned short int>);
|
||||
static_assert(std::__libcpp_unsigned_integer<unsigned int>);
|
||||
static_assert(std::__libcpp_unsigned_integer<unsigned long int>);
|
||||
static_assert(std::__libcpp_unsigned_integer<unsigned long long int>);
|
||||
static_assert(std::__libcpp_unsigned_integer<unsigned short int>);
|
||||
static_assert(std::__unsigned_integer<unsigned char>);
|
||||
static_assert(std::__unsigned_integer<unsigned short int>);
|
||||
static_assert(std::__unsigned_integer<unsigned int>);
|
||||
static_assert(std::__unsigned_integer<unsigned long int>);
|
||||
static_assert(std::__unsigned_integer<unsigned long long int>);
|
||||
static_assert(std::__unsigned_integer<unsigned short int>);
|
||||
#if _LIBCPP_HAS_INT128
|
||||
static_assert(std::__libcpp_unsigned_integer<__uint128_t>);
|
||||
static_assert(std::__unsigned_integer<__uint128_t>);
|
||||
#endif
|
||||
// Signed
|
||||
static_assert(!std::__libcpp_unsigned_integer<signed char>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<short int>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<int>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<long int>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<long long int>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<short int>);
|
||||
static_assert(!std::__unsigned_integer<signed char>);
|
||||
static_assert(!std::__unsigned_integer<short int>);
|
||||
static_assert(!std::__unsigned_integer<int>);
|
||||
static_assert(!std::__unsigned_integer<long int>);
|
||||
static_assert(!std::__unsigned_integer<long long int>);
|
||||
static_assert(!std::__unsigned_integer<short int>);
|
||||
#if _LIBCPP_HAS_INT128
|
||||
static_assert(!std::__libcpp_unsigned_integer<__int128_t>);
|
||||
static_assert(!std::__unsigned_integer<__int128_t>);
|
||||
#endif
|
||||
// Non-integer
|
||||
static_assert(!std::__libcpp_unsigned_integer<bool>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<char>);
|
||||
static_assert(!std::__unsigned_integer<bool>);
|
||||
static_assert(!std::__unsigned_integer<char>);
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
static_assert(!std::__libcpp_unsigned_integer<wchar_t>);
|
||||
static_assert(!std::__unsigned_integer<wchar_t>);
|
||||
#endif
|
||||
static_assert(!std::__libcpp_unsigned_integer<char8_t>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<char16_t>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<char32_t>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<float>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<double>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<long double>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<void>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<int*>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<unsigned int*>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<SomeObject>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<SomeEnum>);
|
||||
static_assert(!std::__libcpp_unsigned_integer<SomeScopedEnum>);
|
||||
static_assert(!std::__unsigned_integer<char8_t>);
|
||||
static_assert(!std::__unsigned_integer<char16_t>);
|
||||
static_assert(!std::__unsigned_integer<char32_t>);
|
||||
static_assert(!std::__unsigned_integer<float>);
|
||||
static_assert(!std::__unsigned_integer<double>);
|
||||
static_assert(!std::__unsigned_integer<long double>);
|
||||
static_assert(!std::__unsigned_integer<void>);
|
||||
static_assert(!std::__unsigned_integer<int*>);
|
||||
static_assert(!std::__unsigned_integer<unsigned int*>);
|
||||
static_assert(!std::__unsigned_integer<SomeObject>);
|
||||
static_assert(!std::__unsigned_integer<SomeEnum>);
|
||||
static_assert(!std::__unsigned_integer<SomeScopedEnum>);
|
||||
|
||||
Reference in New Issue
Block a user