Skip to content

Commit 18a9be8

Browse files
committed
DPL: Simplify prune_voids_pack
Use the requirements directly on the template arguments.
1 parent 7eaa964 commit 18a9be8

File tree

1 file changed

+13
-11
lines changed
  • Framework/Foundation/include/Framework

1 file changed

+13
-11
lines changed

Framework/Foundation/include/Framework/Pack.h

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -114,42 +114,44 @@ consteval auto prune_voids_pack(Result result, pack<>)
114114
return result;
115115
}
116116

117+
template<typename T>
118+
concept void_pack_element = std::is_void_v<T>;
119+
120+
template<typename T>
121+
concept nonvoid_pack_element = !void_pack_element<T>;
122+
123+
117124
// The first one is non void, but one of the others is void
118-
template <typename... Rs, typename T, typename... Ts>
119-
requires(!std::is_void_v<T>)
125+
template <typename... Rs, nonvoid_pack_element T, typename... Ts>
120126
consteval auto prune_voids_pack(pack<Rs...> result, pack<T, Ts...>)
121127
{
122128
return prune_voids_pack(pack<Rs..., T>{}, pack<Ts...>{});
123129
}
124130

125131
// The first one is void
126-
template <typename... Rs, typename V, typename... Ts>
127-
requires(std::is_void_v<V>)
132+
template <typename... Rs, void_pack_element V, typename... Ts>
128133
consteval auto prune_voids_pack(pack<Rs...> result, pack<V, Ts...>)
129134
{
130135
return prune_voids_pack(pack<Rs...>{}, pack<Ts...>{});
131136
}
132137

133138
// The first one is non void, but one of the others is void
134-
template <typename... Rs, typename T1, typename T2, typename... Ts>
135-
requires(!std::is_void_v<T1> && !std::is_void_v<T2>)
139+
template <typename... Rs, nonvoid_pack_element T1, nonvoid_pack_element T2, typename... Ts>
136140
consteval auto prune_voids_pack(pack<Rs...> result, pack<T1, T2, Ts...>)
137141
{
138142
return prune_voids_pack(pack<Rs..., T1, T2>{}, pack<Ts...>{});
139143
}
140144

141145
// Eats 4 types at the time
142-
template <typename... Rs, typename T1, typename T2, typename T3, typename T4, typename... Ts>
143-
requires(!std::is_void_v<T1> && !std::is_void_v<T2> && !std::is_void_v<T3> && !std::is_void_v<T4>)
146+
template <typename... Rs, nonvoid_pack_element T1, nonvoid_pack_element T2, nonvoid_pack_element T3, nonvoid_pack_element T4, typename... Ts>
144147
consteval auto prune_voids_pack(pack<Rs...> result, pack<T1, T2, T3, T4, Ts...>)
145148
{
146149
return prune_voids_pack(pack<Rs..., T1, T2, T3, T4>{}, pack<Ts...>{});
147150
}
148151

149152
// Eats 8 types at the time
150-
template <typename... Rs, typename T1, typename T2, typename T3, typename T4,
151-
typename T5, typename T6, typename T7, typename T8, typename... Ts>
152-
requires(!std::is_void_v<T1> && !std::is_void_v<T2> && !std::is_void_v<T3> && !std::is_void_v<T4> && !std::is_void_v<T5> && !std::is_void_v<T6> && !std::is_void_v<T7> && !std::is_void_v<T8>)
153+
template <typename... Rs, nonvoid_pack_element T1, nonvoid_pack_element T2, nonvoid_pack_element T3, nonvoid_pack_element T4,
154+
nonvoid_pack_element T5, nonvoid_pack_element T6, nonvoid_pack_element T7, nonvoid_pack_element T8, typename... Ts>
153155
consteval auto prune_voids_pack(pack<Rs...> result, pack<T1, T2, T3, T4, T5, T6, T7, T8, Ts...>)
154156
{
155157
return prune_voids_pack(pack<Rs..., T1, T2, T3, T4, T5, T6, T7, T8>{}, pack<Ts...>{});

0 commit comments

Comments
 (0)