#pragma once #include #include template struct hasher { template typename std::enable_if< i == sizeof...(Types), size_t>::type hashi(const std::tuple& record) const { return 0; } template typename std::enable_if< i < sizeof ...(Types), size_t>::type hashi(const std::tuple& record) const { using current_type = typename std::decay>::type>::type; return std::hash()(std::get(record)) ^ hashi(record); } size_t operator()(const std::tuple& record) const { return hashi(record); } };