Skip to content

Instantly share code, notes, and snippets.

@asford
Last active December 29, 2018 09:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save asford/b87d2f67115989692210a5690f7c6ec3 to your computer and use it in GitHub Desktop.
Save asford/b87d2f67115989692210a5690f7c6ec3 to your computer and use it in GitHub Desktop.
C++17 Tuple Operator Overloads
// Fold expressions from https://medium.com/@matt.aubury/rip-index-sequence-2014-2017-9cc854aaad0
`
template <typename... Ts, typename... Us>
auto operator+(
const std::tuple<Ts...> &tuple_t, const std::tuple<Us...> &tuple_u) {
return std::apply(
[&](const auto &... ts) {
return std::apply(
[&](const auto &... us) { return std::tuple(ts + us...); },
tuple_u);
},
tuple_t);
}
template <typename... Ts, typename... Us>
auto operator+=(std::tuple<Ts...> &tuple_t, const std::tuple<Us...> &tuple_u) {
return std::apply(
[&](auto &... ts) {
return std::apply(
[&](const auto &... us) { ((ts += us), ...); }, tuple_u);
},
tuple_t);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment