{
    return BinaryDataAsSequenceOfValuesIterator<T, Container>(container);
}
template <typename T, typename ContainerLeft, typename ContainerRight>
::testing::AssertionResult EqualByteContainersAs(const ContainerLeft & left, const ContainerRight & right)
{
    static_assert(sizeof(typename ContainerLeft::value_type) == 1, "Expected byte-container");
    static_assert(sizeof(typename ContainerRight::value_type) == 1, "Expected byte-container");
    ::testing::AssertionResult result = ::testing::AssertionSuccess();
    const auto l_size = left.size()  sizeof(T);
    const auto r_size = right.size()  sizeof(T);
    const auto size = std::min(l_size, r_size);
    if (l_size != r_size)
    {
        result = ::testing::AssertionFailure() << "size mismatch, expected: " << l_size << " got:" << r_size;
    }
    if (l_size == 0 || r_size == 0)
    {
        return result;
    }
    auto l = AsSequenceOf<T>(left);
    auto r = AsSequenceOf<T>(right);
    static constexpr auto MAX_MISMATCHING_ITEMS = 5;
    int mismatching_items = 0;
    size_t i = 0;
    while (l && r)
    {
        const auto left_value = *l;