A table is described by types: each column is a pair of key type and value type. To build the reverse index you need the same table with every pair flipped — and you need it as a TYPE, at compile time. One pack expansion does the whole job.
Implement FlipPairs<Tuple>::type: a tuple of pairs becomes a tuple of the same pairs with first and second swapped. tuple<pair<float,int>> turns into tuple<pair<int,float>>. Types only, no values.
Specialize for std::tuple<std::pair<As, Bs>...> — the compiler deduces the As pack and the Bs pack together, position by position.
The result is the same expansion with the packs swapped: std::tuple<std::pair<Bs, As>...>.
Hit Submit (or ⌘/Ctrl + ↵) — test results will show up here.