From 0897ec126cba2cb89db24eec30c73c099f6222fe Mon Sep 17 00:00:00 2001 From: jyxiong Date: Mon, 22 Sep 2025 19:02:33 +0800 Subject: [PATCH] feat: add reference type traits --- .../composite_type_categories/is_reference.h | 12 ++++++++++++ .../primary_type_categories/is_lvalue_reference.h | 13 +++++++++++++ .../primary_type_categories/is_rvalue_reference.h | 13 +++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 source/tinystl/type_traits/composite_type_categories/is_reference.h create mode 100644 source/tinystl/type_traits/primary_type_categories/is_lvalue_reference.h create mode 100644 source/tinystl/type_traits/primary_type_categories/is_rvalue_reference.h diff --git a/source/tinystl/type_traits/composite_type_categories/is_reference.h b/source/tinystl/type_traits/composite_type_categories/is_reference.h new file mode 100644 index 0000000..a049922 --- /dev/null +++ b/source/tinystl/type_traits/composite_type_categories/is_reference.h @@ -0,0 +1,12 @@ +#pragma once + +#include "tinystl/type_traits/primary_type_categories/is_lvalue_reference.h" +#include "tinystl/type_traits/primary_type_categories/is_rvalue_reference.h" + +namespace tinystl { +template +struct is_reference : bool_constant::value || is_rvalue_reference::value> {}; + +template +inline constexpr bool is_reference_v = is_reference::value; +} \ No newline at end of file diff --git a/source/tinystl/type_traits/primary_type_categories/is_lvalue_reference.h b/source/tinystl/type_traits/primary_type_categories/is_lvalue_reference.h new file mode 100644 index 0000000..67593d9 --- /dev/null +++ b/source/tinystl/type_traits/primary_type_categories/is_lvalue_reference.h @@ -0,0 +1,13 @@ +#pragma once + +#include "tinystl/type_traits/helper_classes/integral_constant.h" + +namespace tinystl { +template +struct is_lvalue_reference : false_type {}; +template +struct is_lvalue_reference : true_type {}; + +template +inline constexpr bool is_lvalue_reference_v = is_lvalue_reference::value; +} \ No newline at end of file diff --git a/source/tinystl/type_traits/primary_type_categories/is_rvalue_reference.h b/source/tinystl/type_traits/primary_type_categories/is_rvalue_reference.h new file mode 100644 index 0000000..7885e79 --- /dev/null +++ b/source/tinystl/type_traits/primary_type_categories/is_rvalue_reference.h @@ -0,0 +1,13 @@ +#pragma once + +#include "tinystl/type_traits/helper_classes/integral_constant.h" + +namespace tinystl { +template +struct is_rvalue_reference : false_type {}; +template +struct is_rvalue_reference : true_type {}; + +template +inline constexpr bool is_rvalue_reference_v = is_rvalue_reference::value; +} \ No newline at end of file