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