Назначение Сингулярного Итератора

«Единственный итератор»определяется как ап:

итераторы, которые не связаны ни с одной последовательностью. Нулевой указатель, а также созданный по умолчанию указатель (содержащий неопределенное значение) является единственным

Мой вопрос1 было бы:Считается ли созданный по умолчанию итератор «Сингулярным итератором»?

Во-вторых, я былсказал здесь тот:

Результаты большинства выражений не определены для единичных значений; единственными исключениями являются уничтожение итератора, который содержит единственное значение, присвоение не единственного значения итератору, который содержит единственное значение, и для итераторов, которые удовлетворяют требованиям DefaultConstructible, использование инициализатора, инициализированного значением, в качестве источника операция копирования или перемещения.

Вопрос2 является:Является ли работа с «неопределенным» результатом неопределенным поведением? Казалось бы, если бы это было правдой, это было бы неопределенным поведением:

void* foo = nullptr;
auto bar = foo;

Ноработает нормально.

Моя более глубокая мотивация для того, чтобы задать этот вопрос, в том случае, когда у меня есть такая структура:

struct Foo {
    vector<int*>::const_iterator;
};

Я хочу знать, если это неопределенное поведение, чтобы сделать это, гдеassigned это значение построеноFoo объект:

Foo unasigned;

assigned = unassigned;

Если ответы на вопросы1 а также2 Если да, то, вызывая оператор присваивания по умолчанию, я ввожу неопределенное поведение :(

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

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