From 67c2efb85ca4e227618e306e9d8bc804ff74bc86 Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Thu, 14 Jul 2022 17:31:20 +0100 Subject: [PATCH] Added is_enum --- .../etl/generators/type_traits_generator.h | 22 ++++++++++++++++--- include/etl/type_traits.h | 22 ++++++++++++++++--- test/test_type_traits.cpp | 7 ++++-- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/include/etl/generators/type_traits_generator.h b/include/etl/generators/type_traits_generator.h index 82acf12c..8d74b511 100644 --- a/include/etl/generators/type_traits_generator.h +++ b/include/etl/generators/type_traits_generator.h @@ -704,7 +704,7 @@ namespace etl #endif //*************************************************************************** - /// decval + /// declval #if ETL_USING_CPP11 template typename etl::add_rvalue_reference::type declval() ETL_NOEXCEPT; @@ -742,7 +742,7 @@ namespace etl inline constexpr bool is_enum_v = etl::is_enum::value; #endif -#endif // ETL_USING_CPP11 +#endif //*************************************************************************** /// is_convertible @@ -1256,10 +1256,26 @@ namespace etl #endif //*************************************************************************** - /// decval + /// declval #if ETL_USING_CPP11 template typename std::add_rvalue_reference::type declval() ETL_NOEXCEPT; +#endif + +#if ETL_USING_CPP11 + //*************************************************************************** + /// is_enum + ///\ingroup type_traits + template + struct is_enum : std::is_enum + { + }; + +#if ETL_USING_CPP17 + template + inline constexpr bool is_enum_v = etl::is_enum::value; +#endif + #endif //*************************************************************************** diff --git a/include/etl/type_traits.h b/include/etl/type_traits.h index c503e7d8..adb67f9b 100644 --- a/include/etl/type_traits.h +++ b/include/etl/type_traits.h @@ -692,7 +692,7 @@ namespace etl #endif //*************************************************************************** - /// decval + /// declval #if ETL_USING_CPP11 template typename etl::add_rvalue_reference::type declval() ETL_NOEXCEPT; @@ -730,7 +730,7 @@ namespace etl inline constexpr bool is_enum_v = etl::is_enum::value; #endif -#endif // ETL_USING_CPP11 +#endif //*************************************************************************** /// is_convertible @@ -1244,10 +1244,26 @@ namespace etl #endif //*************************************************************************** - /// decval + /// declval #if ETL_USING_CPP11 template typename std::add_rvalue_reference::type declval() ETL_NOEXCEPT; +#endif + +#if ETL_USING_CPP11 + //*************************************************************************** + /// is_enum + ///\ingroup type_traits + template + struct is_enum : std::is_enum + { + }; + +#if ETL_USING_CPP17 + template + inline constexpr bool is_enum_v = etl::is_enum::value; +#endif + #endif //*************************************************************************** diff --git a/test/test_type_traits.cpp b/test/test_type_traits.cpp index 61d01e08..83848757 100644 --- a/test/test_type_traits.cpp +++ b/test/test_type_traits.cpp @@ -67,14 +67,16 @@ namespace }; // Class which can be implicitly converted to/from any default-constructable type - struct ToAny { + struct ToAny + { ToAny() = default; template ToAny(T){}; template operator T() { return T(); } }; // Can't be default constructed - struct NotDefaultConstructable { + struct NotDefaultConstructable + { NotDefaultConstructable() = delete; }; @@ -985,6 +987,7 @@ namespace //************************************************************************* #define CHECK_EQUAL_FOR_TYPE(type) CHECK_EQUAL(std::is_enum_v, etl::is_enum_v) + TEST(test_is_enum) { CHECK_EQUAL_FOR_TYPE(void); CHECK_EQUAL_FOR_TYPE(void*);