One possible solution:
Another idea is to make "byPair" and "pairs" templates that by default return 2-structs and use a Tuple on request (so you have to import Phobos Tuple if you want them, so byPair doesn't depend on Phobos and you can put in druntime):
int[string] aa;
assert(aa.byPair.array == aa.pairs);
byPair yields something like:
struct Pair { string key; value int; }
Now this yields tuples:
assert(aa.byPair!Tuple.array == aa.pairs!Tuple);
Bye,
bearophile
