C++14では、Forward Iteratorを値初期化した場合に、どこも指さないヌルイテレータになるという規定が追加されます。
vector<int> v = {1,2,3}; auto ni = vector<int>::iterator(); auto nd = vector<double>::iterator(); ni == ni; // True nd != nd; // False v.begin() == ni; // 未定義の振る舞い(実際にはfalseになるだろう) v.end() == ni; // 未定義の振る舞い(実際にはfalseになるだろう) ni == nd; // コンパイルに成功してほしくない
これは、コンテナのインタフェースなしに、イテレータだけで空の範囲を生成するために必要になります。