すみません、下記のコードがコンパイル時にエラーになるような、
「クラスじゃなくて実体に対して定義されるイテレータ」のようなものはないですか?
なんでこんな怖い仕様にしとくのかなと思って・・・

#include <string>
#include <iostream>
using namespace std;
void main()
{
string a, b;
a = "abcde";
b = "f";

for (string::iterator i=a.begin(); i!=b.end(); ++i) ←このb.end()
cout << *i;
}