マルチセットからすべての重複を出力したいのですが、どういうわけかイテレータが奇妙に動作します。このコードを修正するにはどうすればよいですか? このコードは永久ループを引き起こします。これには驚かされます。
#include <set>
#include <iostream>
#include <sstream>
static void print_duplicate(const std::multiset<int>& mset)
{
  std::stringstream error_msg;
  for (auto it = mset.begin(); it != mset.end(); ++it)
    {
      unsigned count = mset.count(*it);
      if (count < 2)
        continue;
      error_msg << "Duplicated numbers found:\n";
      for (unsigned i = 0; i < count; ++it, ++i)
        error_msg << "\tNum:" << *it << "\n";
    }
  std::cout << error_msg.str();
}
int main()
{
  std::multiset<int> mset;
  // fill it
  mset.insert(1);
  mset.insert(1);
  mset.insert(1);
  print_duplicate(mset);
}
EDIT サイクルの最後に --it を追加しました
  for (unsigned i = 0; i < count; ++it, ++i)
    error_msg << "\tNum:" << *it << "\n";
  --it; // this line fix it
}