C++14 ヌル前方イテレータの規定

N3644 Null Forward Iterators


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;        // コンパイルに成功してほしくない

これは、コンテナのインタフェースなしに、イテレータだけで空の範囲を生成するために必要になります。