All tuple values are passed directly to hash_combine. This is inspired by the implementation used for Swift:
Could you move it right next to the implementation of hash_value for std::pair above?
Ditto, would be nice to maintain the same order as in the header file (right next to the std::pair overload).
Could you add a TODO to replace this custom machinery with a call to std::apply when LLVM starts using C++17?
Right now in C++14 I think we can use std::index_sequence_for instead of MakeTupleIndexSet. The helper can also be moved from a side namespace into a local lambda.
Could you imitate these tests for std::tuple as well?
Added a TODO and used std::index_sequence_for. That's neat.
How would you do that? I know that you can use auto to create a generic lambda, but how do you destructure the type to extract the Indices type parameter?