From 33f0f44d434b7c6384bb55c341eac7b288550c3b Mon Sep 17 00:00:00 2001 From: jyxiong Date: Tue, 23 Sep 2025 14:13:13 +0800 Subject: [PATCH] refactor: simplify type traits --- source/tinystl/type_traits/is_arithmetic.h | 3 +-- source/tinystl/type_traits/is_class.h | 2 +- source/tinystl/type_traits/is_floating_point.h | 11 +++++------ source/tinystl/type_traits/is_member_pointer.h | 2 +- source/tinystl/type_traits/is_null_pointer.h | 2 +- source/tinystl/type_traits/is_object.h | 8 ++++---- source/tinystl/type_traits/is_reference.h | 2 +- source/tinystl/type_traits/is_scalar.h | 12 +++++------- source/tinystl/type_traits/is_void.h | 2 +- 9 files changed, 20 insertions(+), 24 deletions(-) diff --git a/source/tinystl/type_traits/is_arithmetic.h b/source/tinystl/type_traits/is_arithmetic.h index 9680e9c..e774342 100644 --- a/source/tinystl/type_traits/is_arithmetic.h +++ b/source/tinystl/type_traits/is_arithmetic.h @@ -7,8 +7,7 @@ namespace tinystl { template struct is_arithmetic - : integral_constant< - bool, is_integral::value || is_floating_point::value> {}; + : bool_constant || is_floating_point_v> {}; template inline constexpr bool is_arithmetic_v = is_arithmetic::value; diff --git a/source/tinystl/type_traits/is_class.h b/source/tinystl/type_traits/is_class.h index 0f77fba..3d51dbd 100644 --- a/source/tinystl/type_traits/is_class.h +++ b/source/tinystl/type_traits/is_class.h @@ -5,7 +5,7 @@ namespace detail { template -tinystl::integral_constant::value> test(int T::*); +tinystl::bool_constant> test(int T::*); template tinystl::false_type test(...); diff --git a/source/tinystl/type_traits/is_floating_point.h b/source/tinystl/type_traits/is_floating_point.h index 7b4f406..5019dfd 100644 --- a/source/tinystl/type_traits/is_floating_point.h +++ b/source/tinystl/type_traits/is_floating_point.h @@ -1,18 +1,17 @@ #pragma once -#include "tinystl/type_traits/remove_cv.h" #include "tinystl/type_traits/integral_constant.h" #include "tinystl/type_traits/is_same.h" +#include "tinystl/type_traits/remove_cv.h" namespace tinystl { template struct is_floating_point - : integral_constant< - bool, + : bool_constant< // Note: standard floating-point types - is_same::type>::value || - is_same::type>::value || - is_same::type>::value> {}; + is_same_v> || + is_same_v> || + is_same_v>> {}; template inline constexpr bool is_floating_point_v = is_floating_point::value; diff --git a/source/tinystl/type_traits/is_member_pointer.h b/source/tinystl/type_traits/is_member_pointer.h index 0103290..2ea1ae3 100644 --- a/source/tinystl/type_traits/is_member_pointer.h +++ b/source/tinystl/type_traits/is_member_pointer.h @@ -12,7 +12,7 @@ struct is_member_pointer_helper : true_type {}; template struct is_member_pointer - : is_member_pointer_helper::type> {}; + : is_member_pointer_helper> {}; template inline constexpr bool is_member_pointer_v = is_member_pointer::value; diff --git a/source/tinystl/type_traits/is_null_pointer.h b/source/tinystl/type_traits/is_null_pointer.h index 3ba129b..b864676 100644 --- a/source/tinystl/type_traits/is_null_pointer.h +++ b/source/tinystl/type_traits/is_null_pointer.h @@ -7,7 +7,7 @@ namespace tinystl { template -struct is_null_pointer : is_same::type> { +struct is_null_pointer : is_same> { }; template diff --git a/source/tinystl/type_traits/is_object.h b/source/tinystl/type_traits/is_object.h index f5feadf..2d93fe1 100644 --- a/source/tinystl/type_traits/is_object.h +++ b/source/tinystl/type_traits/is_object.h @@ -1,17 +1,17 @@ #pragma once -#include "tinystl/type_traits/is_scalar.h" #include "tinystl/type_traits/integral_constant.h" #include "tinystl/type_traits/is_array.h" #include "tinystl/type_traits/is_class.h" +#include "tinystl/type_traits/is_scalar.h" #include "tinystl/type_traits/is_union.h" namespace tinystl { // https://en.cppreference.com/w/cpp/types/is_object.html template -struct is_object : integral_constant< - bool, is_scalar::value || is_array::value || - is_union::value || is_class::value> {}; +struct is_object + : bool_constant< + is_scalar_v || is_array_v || is_union_v || is_class_v> {}; template inline constexpr bool is_object_v = is_object::value; diff --git a/source/tinystl/type_traits/is_reference.h b/source/tinystl/type_traits/is_reference.h index 861b55f..f6546e1 100644 --- a/source/tinystl/type_traits/is_reference.h +++ b/source/tinystl/type_traits/is_reference.h @@ -5,7 +5,7 @@ namespace tinystl { template -struct is_reference : bool_constant::value || is_rvalue_reference::value> {}; +struct is_reference : bool_constant || is_rvalue_reference_v> {}; template inline constexpr bool is_reference_v = is_reference::value; diff --git a/source/tinystl/type_traits/is_scalar.h b/source/tinystl/type_traits/is_scalar.h index 61f4adc..cf6b838 100644 --- a/source/tinystl/type_traits/is_scalar.h +++ b/source/tinystl/type_traits/is_scalar.h @@ -1,20 +1,18 @@ #pragma once -#include "tinystl/type_traits/is_arithmetic.h" -#include "tinystl/type_traits/is_member_pointer.h" #include "tinystl/type_traits/integral_constant.h" +#include "tinystl/type_traits/is_arithmetic.h" #include "tinystl/type_traits/is_enum.h" +#include "tinystl/type_traits/is_member_pointer.h" #include "tinystl/type_traits/is_null_pointer.h" #include "tinystl/type_traits/is_pointer.h" namespace tinystl { // https://en.cppreference.com/w/cpp/types/is_scalar template -struct is_scalar - : integral_constant< - bool, is_arithmetic::value || is_enum::value || - is_pointer::value || is_member_pointer::value || - is_null_pointer::value> {}; +struct is_scalar : bool_constant< + is_arithmetic_v || is_enum_v || is_pointer_v || + is_member_pointer_v || is_null_pointer_v> {}; template inline constexpr bool is_scalar_v = is_scalar::value; diff --git a/source/tinystl/type_traits/is_void.h b/source/tinystl/type_traits/is_void.h index b9cf3b3..e7ca9b3 100644 --- a/source/tinystl/type_traits/is_void.h +++ b/source/tinystl/type_traits/is_void.h @@ -7,7 +7,7 @@ namespace tinystl { // https://en.cppreference.com/w/cpp/types/is_void.html template -struct is_void : is_same::type> {}; +struct is_void : is_same> {}; template inline constexpr bool is_void_v = is_void::value;