Сравнение построенных по умолчанию итераторов с оператором ==

Стандарт C ++ говорит, что я должен быть в состоянии сравнить два построенных по умолчанию итератора STL на равенство? Итераторы, построенные по умолчанию, сравнимы по равенству?

Я хочу следующее, используя std :: list например:

void foo(const std::list<int>::iterator iter) {
    if (iter == std::list<int>::iterator()) {
        // Something
    }
}

std::list<int>::iterator i;
foo(i);

Здесь мне нужно что-то вроде значения NULL для итераторов, но я не уверен, допустимо ли оно. В реализацию STL, включенную в Visual Studio 2008, они включают утверждения в операторе std :: list & reg; == (), которые исключают это использование. (Они проверяют, что каждый итератор "принадлежит" одному и тому же контейнеру, а построенные по умолчанию итераторы не имеют контейнера.) Это намекает на то, что это не законно или, возможно, они чрезмерно усердны.

Ответы на вопрос(4)

Ваш ответ на вопрос