const auto right_value = *r;
        ++l;
        ++r;
        ++i;
        if (left_value != right_value)
        {
            if (result)
            {
                result = ::testing::AssertionFailure();
            }
            if (++mismatching_items <= MAX_MISMATCHING_ITEMS)
            {
                result << "\nmismatching " << sizeof(T) << "-byte item #" << i
                   << "\nexpected: " << bin(left_value) << " (0x" << std::hex << size_t(left_value) << ")"
                   << "\ngot     : " << bin(right_value) << " (0x" << std::hex << size_t(right_value) << ")";
                if (mismatching_items == MAX_MISMATCHING_ITEMS)
                {
                    result << "\n..." << std::endl;
                }
            }
        }
    }
    if (mismatching_items > 0)
    {
        result << "total mismatching items:" << mismatching_items << " of " << size;
    }
    return result;
}
template <typename ContainerLeft, typename ContainerRight>
::testing::AssertionResult EqualByteContainers(uint8_t element_size, const ContainerLeft & left, const ContainerRight & right)