Skip to content

Commit 93e085a

Browse files
authored
Merge pull request #12 from tukl-msd/feat/unique_types_trait
unique_types implemented
2 parents ce1f229 + 809a0f9 commit 93e085a

File tree

1 file changed

+16
-0
lines changed
  • include/DRAMUtils/DRAMUtils/util

1 file changed

+16
-0
lines changed

include/DRAMUtils/DRAMUtils/util/types.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,22 @@ struct is_one_of<T, type_sequence<Ts...>> :
6161
std::bool_constant<(std::is_same_v<T, Ts> || ...)>
6262
{};
6363

64+
// Helper struct to check if types in a sequence are unique
65+
// forward declaration
66+
template <typename... Ts>
67+
struct unique_types : std::true_type {}; // empty case
68+
// specialization
69+
template <typename First, typename... Ts>
70+
struct unique_types<First, Ts...> :
71+
std::bool_constant<
72+
(sizeof...(Ts) == 0) || // single type case
73+
!(std::is_same_v<First, Ts> || ...) && // check if First is not in Ts...
74+
unique_types<Ts...>::value // recursive check
75+
>
76+
{};
77+
template <typename... Ts>
78+
struct unique_types<type_sequence<Ts...>> : unique_types<Ts...> {};
79+
6480
// Helper
6581
// Default case
6682
template <typename T, typename = void>

0 commit comments

Comments
 (0)