// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <algorithm>
#include <vector>
void OverloadedOperatorPlus(std::vector<int>& v) {
auto begin = std::begin(v);
// Fine comparison because we are using the returned iterator.
if (begin != std::end(v)) {
auto next = begin + 1;
// Valid because it was checked against `end`.
*begin;
// Invalid because it was not checked against `end`.
*next;
}
}
void OverloadedOperatorPlusPlus(std::vector<int>& v) {
auto begin = std::begin(v);
// Fine comparison because we are using the returned iterator.
if (begin != std::end(v)) {
auto next = begin++;
// Both invalid because they were not checked against `end`.
*begin;
*next;
if (begin != std::end(v)) {
// Valid because it was checked against `end`.
*begin;
// Invalid because it was not checked against `end`.
*next;
}
}
}
void OverloadedOperatorPlusEqual(std::vector<int>& v) {
auto begin = std::begin(v);
// Fine comparison because we are using the returned iterator.
if (begin != std::end(v)) {
auto next = begin += 1;
// Both invalid because they were not checked against `end`.
*begin;
*next;
if (begin != std::end(v)) {
// Valid because it was checked against `end`.
*begin;
// Invalid because it was not checked against `end`.
*next;
}
}
}