Let
Fns be a pack of the arguments of
the
completion_signatures specialization named by
Completions,
let
TagFns be a pack of the function types in
Fns
whose return types are
Tag, and
let
Tsn be a pack of the function argument types
in the
n-th type in
TagFns. Then, given two variadic templates Tuple and Variant,
the type gather-signatures<Tag, Completions, Tuple, Variant>
names the type
META-APPLY(Variant, META-APPLY(Tuple, Ts0...),
META-APPLY(Tuple, Ts1...),
…,
META-APPLY(Tuple, Tsm−1...))
where m is the size of the pack TagFns and
META-APPLY(T, As...) is equivalent to:
typename indirect-meta-apply<always-true<As...>>::template meta-apply<T, As...>