From 6de408590e7c772173543f1f1c9f1c584a0b42cd Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Fri, 15 Oct 2021 05:20:08 -0400 Subject: [PATCH] Meta traits for set and map. --- Meta/is_map.h | 34 ++++++++++++++++++++++++++++++++++ Meta/is_set.h | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 Meta/is_map.h create mode 100644 Meta/is_set.h diff --git a/Meta/is_map.h b/Meta/is_map.h new file mode 100644 index 0000000..84afed7 --- /dev/null +++ b/Meta/is_map.h @@ -0,0 +1,34 @@ +static_assert( __cplusplus > 201700, "C++17 Required" ); + +#pragma once + +#include + +#include +#include + +namespace Alepha::Hydrogen::Meta +{ + inline namespace exports { inline namespace type_traits {} } + + namespace detail::type_traits::is_map + { + inline namespace exports + { + template< typename T > + struct is_map : std::false_type {}; + + template< typename T, typename ... Args > + struct is_map< std::map< T, Args... > > : std::true_type {}; + + template< typename T > + constexpr bool is_map_v= is_map< T >::value; + } + } + + namespace exports::type_traits + { + using namespace detail::type_traits::is_map::exports; + } +} + diff --git a/Meta/is_set.h b/Meta/is_set.h new file mode 100644 index 0000000..3219e0c --- /dev/null +++ b/Meta/is_set.h @@ -0,0 +1,34 @@ +static_assert( __cplusplus > 201700, "C++17 Required" ); + +#pragma once + +#include + +#include +#include + +namespace Alepha::Hydrogen::Meta +{ + inline namespace exports { inline namespace type_traits {} } + + namespace detail::type_traits::is_set + { + inline namespace exports + { + template< typename T > + struct is_set : std::false_type {}; + + template< typename T, typename ... Args > + struct is_set< std::set< T, Args... > > : std::true_type {}; + + template< typename T > + constexpr bool is_set_v= is_set< T >::value; + } + } + + namespace exports::type_traits + { + using namespace detail::type_traits::is_set::exports; + } +} +