
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?