#include <algorithm>
#include <vector>
bool A();
bool B();
void SameConditionInvalidatesThenValidatesIterator() {
std::vector<int> container = {1, 2, 3};
auto it = container.begin() + 1;
if (it == container.end()) {
return;
}
const bool a = A();
if (a) {
container.clear();
}
if (a) {
container.push_back(1);
container.push_back(2);
it = container.begin() + 1;
if (it == std::end(container)) {
return;
}
}
*it = 10;
}
void SameConditionUncheckedIterator() {
std::vector<int> container = {1, 2, 3};
auto it = container.begin() + 1;
if (it == std::end(container)) {
return;
}
const bool a = A();
if (a) {
container.clear();
}
if (!a) {
container.push_back(1);
container.push_back(2);
it = container.begin() + 1;
}
*it = 10;
}
void DifferentConditionsWithCheckedIterator() {
std::vector<int> container = {1, 2, 3};
auto it = container.begin() + 1;
if (it == std::end(container)) {
return;
}
const bool a = A();
const bool b = B();
if (a && b) {
container.clear();
}
if (a || b) {
container.push_back(1);
container.push_back(2);
it = container.begin() + 1;
if (it == std::end(container)) {
return;
}
}
*it = 10;
}
void DifferentConditionsWithUncheckedIterator() {
std::vector<int> container = {1, 2, 3};
auto it = container.begin() + 1;
if (it == std::end(container)) {
return;
}
const bool a = A();
const bool b = B();
if (a && b) {
container.clear();
}
if (a || b) {
container.push_back(1);
container.push_back(2);
it = container.begin() + 1;
}
*it = 10;
}