From 3131130c4c254173f5511a0803d358551656e7d3 Mon Sep 17 00:00:00 2001 From: jyxiong Date: Tue, 23 Sep 2025 23:27:01 +0800 Subject: [PATCH] feat: impl new type traits --- source/tinystl/experimental/type_traits.h | 62 +++++++++++++++++++ source/tinystl/type_traits.h | 3 + source/tinystl/type_traits/add_reference.h | 35 +++++++++++ source/tinystl/type_traits/is_constructible.h | 38 ++++++++++++ source/tinystl/type_traits/is_convertible.h | 21 +++++++ source/tinystl/type_traits/is_empty.h | 2 +- source/tinystl/type_traits/is_enum.h | 2 +- 7 files changed, 161 insertions(+), 2 deletions(-) create mode 100644 source/tinystl/experimental/type_traits.h create mode 100644 source/tinystl/type_traits/add_reference.h create mode 100644 source/tinystl/type_traits/is_constructible.h create mode 100644 source/tinystl/type_traits/is_convertible.h diff --git a/source/tinystl/experimental/type_traits.h b/source/tinystl/experimental/type_traits.h new file mode 100644 index 0000000..3c0c119 --- /dev/null +++ b/source/tinystl/experimental/type_traits.h @@ -0,0 +1,62 @@ +#pragma once + +#include "tinystl/type_traits/integral_constant.h" +#include "tinystl/type_traits/void_t.h" +#include "tinystl/type_traits/is_same.h" +#include "tinystl/type_traits/is_convertible.h" + +namespace detail { +template < + class Default, class AlwaysVoid, template class Op, class... Args> +struct detector { + using value_t = tinystl::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> { + using value_t = tinystl::true_type; + using type = Op; +}; +} // namespace detail + +namespace tinystl { + +struct nonesuch { + ~nonesuch() = delete; + nonesuch(nonesuch const &) = delete; + void operator=(nonesuch const &) = delete; +}; + +template