It must be your use of the boost zip iterator in general.  I've never used
it before, but replacing the Eigen vector with std::vector results in the
same issue.

https://godbolt.org/z/e137hEaj9

On Sat, Jun 29, 2024 at 9:30 PM Kip Warner <[email protected]> wrote:

> Hello list,
>
> I noticed today a problem in Boost's zip_iterator traversing well
> beyond the end of a pair of equal dimension Eigen column vectors.
>
> I've prepared a minimal below:
>
>    #include <iostream>
>    #include <Eigen/Core>
>    #include <boost/iterator/zip_iterator.hpp>
>
>    using namespace std;
>
>    int main()
>    {
>        using ColumnVectorType = Eigen::Matrix<float, 32, 1>;
>
>        ColumnVectorType FirstVector = ColumnVectorType::Zero();
>        ColumnVectorType SecondVector = ColumnVectorType::Zero();
>
>        const auto ZipperStart = boost::make_zip_iterator(
>            boost::make_tuple(
>                std::cbegin(FirstVector),
>                std::cbegin(SecondVector)));
>
>        // End...
>        const auto ZipperEnd = boost::make_zip_iterator(
>            boost::make_tuple(
>                std::cend(FirstVector),
>                std::cend(SecondVector)));
>
>        int index = 0;
>
>        for(auto Iterator = ZipperStart; ZipperStart != ZipperEnd;
> ++Iterator)
>        {
>            std::cout << "Iteration: " << index << std::endl;
>          ++index;
>        }
>
>        return 0;
>    }
>
> Running the above via Godbolt results in iterating the body of the loop
> thousands of times when I expected only 32.
>
>    https://godbolt.org/z/fKG77s1ds
>
> I then modified the above code to get rid of the second column vector
> and the zip_iterator to iterate via the normal STL interface over the
> single column vector. It executes as expected only 32 times.
>
> This is probably just a problem with my usage, but I just wanted to let
> the list know in case this is a bug.
>
> --
> Kip Warner
> OpenPGP signed/encrypted mail preferred
> https://www.thevertigo.com
>

Reply via email to