fork(2) download
  1. #include <iostream>
  2. #include <tuple>
  3.  
  4. namespace detail
  5. {
  6.  
  7. template <std::size_t ... Is, typename Tuple>
  8. bool areAllMembersDifferent(std::index_sequence<Is...>,
  9. const Tuple& left,
  10. const Tuple& right)
  11. {
  12. bool res = true;
  13.  
  14. const int dummy[] = {0, (res &= std::get<Is>(left) != std::get<Is>(right), 0)...};
  15. static_cast<void>(dummy); // Avoid warning for unused variable
  16. return res;
  17. }
  18.  
  19. }
  20.  
  21. template <typename Tuple>
  22. bool areAllMembersDifferent(const Tuple&left, const Tuple& right)
  23. {
  24. return detail::areAllMembersDifferent(
  25. std::make_index_sequence<std::tuple_size<Tuple>::value>(), left, right);
  26. }
  27.  
  28. int main() {
  29. std::cout << areAllMembersDifferent(std::make_tuple(12, '*', 4.2f), std::make_tuple(11, '#', 4.25f)) << std::endl;
  30. std::cout << areAllMembersDifferent(std::make_tuple(12, '*', 4.2f), std::make_tuple(11, '#', 4.2f)) << std::endl;
  31. }
Success #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
1
0