| // 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> |
| |
| // Checks that comparison between valid iterators but from different containers |
| // triggers an error. |
| void ValidIteratorsWithDifferentContainers() { |
| std::vector<int> v1, v2; |
| |
| auto it1 = v1.begin(); |
| auto it2 = v2.begin(); |
| |
| if (it1 == v1.end() || it2 == v2.end()) { |
| return; |
| } |
| |
| // Iterators are now valid, because we checked them against the `end` |
| // iterator. |
| *it1; |
| *it2; |
| |
| // Wrong comparison, those iterators are not coming from the same container. |
| if (it1 == it2) { |
| return; |
| } |
| } |
| |
| // Checks that iterators checked against the wrong `end` iterator triggers an |
| // error. |
| void WrongEndIteratorCheck() { |
| std::vector<int> v1, v2; |
| |
| // Wrong comparison, iterators are not from the same containers. |
| if (v1.begin() != v2.end()) { |
| return; |
| } |
| |
| auto it = v1.begin(); |
| if (it != v2.end()) { |
| return; |
| } |
| } |