Skip to content

Commit ec3e064

Browse files
committed
DPL: Simplify prune_voids_pack
Use the requirements directly on the template arguments.
1 parent fc66ba2 commit ec3e064

File tree

1 file changed

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

1 file changed

+12
-11
lines changed

Framework/Foundation/include/Framework/Pack.h

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -114,42 +114,43 @@ 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+
117123
// 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>)
124+
template <typename... Rs, nonvoid_pack_element T, typename... Ts>
120125
consteval auto prune_voids_pack(pack<Rs...> result, pack<T, Ts...>)
121126
{
122127
return prune_voids_pack(pack<Rs..., T>{}, pack<Ts...>{});
123128
}
124129

125130
// The first one is void
126-
template <typename... Rs, typename V, typename... Ts>
127-
requires(std::is_void_v<V>)
131+
template <typename... Rs, void_pack_element V, typename... Ts>
128132
consteval auto prune_voids_pack(pack<Rs...> result, pack<V, Ts...>)
129133
{
130134
return prune_voids_pack(pack<Rs...>{}, pack<Ts...>{});
131135
}
132136

133137
// 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>)
138+
template <typename... Rs, nonvoid_pack_element T1, nonvoid_pack_element T2, typename... Ts>
136139
consteval auto prune_voids_pack(pack<Rs...> result, pack<T1, T2, Ts...>)
137140
{
138141
return prune_voids_pack(pack<Rs..., T1, T2>{}, pack<Ts...>{});
139142
}
140143

141144
// 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>)
145+
template <typename... Rs, nonvoid_pack_element T1, nonvoid_pack_element T2, nonvoid_pack_element T3, nonvoid_pack_element T4, typename... Ts>
144146
consteval auto prune_voids_pack(pack<Rs...> result, pack<T1, T2, T3, T4, Ts...>)
145147
{
146148
return prune_voids_pack(pack<Rs..., T1, T2, T3, T4>{}, pack<Ts...>{});
147149
}
148150

149151
// 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>)
152+
template <typename... Rs, nonvoid_pack_element T1, nonvoid_pack_element T2, nonvoid_pack_element T3, nonvoid_pack_element T4,
153+
nonvoid_pack_element T5, nonvoid_pack_element T6, nonvoid_pack_element T7, nonvoid_pack_element T8, typename... Ts>
153154
consteval auto prune_voids_pack(pack<Rs...> result, pack<T1, T2, T3, T4, T5, T6, T7, T8, Ts...>)
154155
{
155156
return prune_voids_pack(pack<Rs..., T1, T2, T3, T4, T5, T6, T7, T8>{}, pack<Ts...>{});

0 commit comments

Comments
 (0)