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..>