#include <iostream>
#include <tuple>
namespace detail
{
template <std::size_t ... Is, typename Tuple>
bool areAllMembersDifferent(std::index_sequence<Is...>,
const Tuple& left,
const Tuple& right)
{
bool res = true;
const int dummy[] = {0, (res &= std::get<Is>(left) != std::get<Is>(right), 0)...};
static_cast<void>(dummy); // Avoid warning for unused variable
return res;
}
}
template <typename Tuple>
bool areAllMembersDifferent(const Tuple&left, const Tuple& right)
{
return detail::areAllMembersDifferent(
std::make_index_sequence<std::tuple_size<Tuple>::value>(), left, right);
}
int main() {
std::cout << areAllMembersDifferent(std::make_tuple(12, '*', 4.2f), std::make_tuple(11, '#', 4.25f)) << std::endl;
std::cout << areAllMembersDifferent(std::make_tuple(12, '*', 4.2f), std::make_tuple(11, '#', 4.2f)) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHVwbGU+CgpuYW1lc3BhY2UgZGV0YWlsCnsKCnRlbXBsYXRlIDxzdGQ6OnNpemVfdCAuLi4gSXMsIHR5cGVuYW1lIFR1cGxlPgpib29sIGFyZUFsbE1lbWJlcnNEaWZmZXJlbnQoc3RkOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUdXBsZSYgbGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFR1cGxlJiByaWdodCkKewogICAgYm9vbCByZXMgPSB0cnVlOwogICAgCiAgICBjb25zdCBpbnQgZHVtbXlbXSA9IHswLCAocmVzICY9IHN0ZDo6Z2V0PElzPihsZWZ0KSAhPSBzdGQ6OmdldDxJcz4ocmlnaHQpLCAwKS4uLn07CiAgICBzdGF0aWNfY2FzdDx2b2lkPihkdW1teSk7IC8vIEF2b2lkIHdhcm5pbmcgZm9yIHVudXNlZCB2YXJpYWJsZQogICAgcmV0dXJuIHJlczsKfQoKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFR1cGxlPgpib29sIGFyZUFsbE1lbWJlcnNEaWZmZXJlbnQoY29uc3QgVHVwbGUmbGVmdCwgY29uc3QgVHVwbGUmIHJpZ2h0KQp7CiAgICByZXR1cm4gZGV0YWlsOjphcmVBbGxNZW1iZXJzRGlmZmVyZW50KAogICAgCXN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxzdGQ6OnR1cGxlX3NpemU8VHVwbGU+Ojp2YWx1ZT4oKSwgbGVmdCwgcmlnaHQpOwp9CgppbnQgbWFpbigpIHsKICAgIHN0ZDo6Y291dCA8PCBhcmVBbGxNZW1iZXJzRGlmZmVyZW50KHN0ZDo6bWFrZV90dXBsZSgxMiwgJyonLCA0LjJmKSwgc3RkOjptYWtlX3R1cGxlKDExLCAnIycsIDQuMjVmKSkgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8IGFyZUFsbE1lbWJlcnNEaWZmZXJlbnQoc3RkOjptYWtlX3R1cGxlKDEyLCAnKicsIDQuMmYpLCBzdGQ6Om1ha2VfdHVwbGUoMTEsICcjJywgNC4yZikpIDw8IHN0ZDo6ZW5kbDsKfQ==