I wonder how can you identify the bug in the source files as I was totally no idea when I saw the error message.

Will you submit the fix to developer list?  :)

Regards,

Victor Tsang
victor.tsang@ieee.org


From: Christopher Jefferson <chris@bubblescope.net>

On 28 Jul 2009, at 09:10, Victor Tsang wrote:

> Hi,
> ...
>
> The Debugger Debugger is attaching to process
>
> It generates a runtime error "error: attempt to copy-construct an
> iterator
> from a singular iterator.".
>
>
> However, if I compile the code in terminal:
> g++ -o test -g -Wall main.cpp -lboost_system-xgcc40-mt
>
> It runs okay without any runtime error.
>

To duplicate the error from the command line, add ' -D_GLIBCXX_DEBUG '
to the command line, which turns on g++'s iterator debugging. Doing
this, I can duplicate your problem.

The problem can be boiled down to the following, illegal, code.

#include <vector>
#include <list>

int main(void)
{
    std::vector<std::list<int>::iterator> v;
    v.resize(1);
}

The code can be fixed (although there may be other occurrences of
similar problems) by changing around line 220 on asio/detail/
hash_map.hpp from:

    // Update number of buckets and initialise all buckets to empty.
    buckets_.resize(num_buckets);
    for (std::size_t i = 0; i < buckets_.size(); ++i)
      buckets_[i].first = buckets_[i].last = end;

to:

    // Update number of buckets and initialise all buckets to empty.
    bucket_type bucket;
    bucket.first = bucket.last = end;
    buckets_.resize(num_buckets, bucket);

I'm surprised boost isn't tested with iterator checking. Any
particular reason, or has simply no-one tried?