|  | // 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 IteratorValidAfterInsert(std::vector<int>& v) { | 
|  | auto it = std::begin(v); | 
|  |  | 
|  | v.insert(it, 0); | 
|  |  | 
|  | it = std::begin(v); | 
|  |  | 
|  | if (it != std::end(v)) { | 
|  | // Fine because it was reassigned after `insert` and checked against `end`. | 
|  | *it; | 
|  | } | 
|  | } | 
|  |  | 
|  | void IteratorInvalidAfterInsert(std::vector<int>& v, int value) { | 
|  | auto it = std::begin(v); | 
|  |  | 
|  | v.insert(it, 0); | 
|  |  | 
|  | // Invalid because insert might have invalidated this iterator. | 
|  | *it; | 
|  | } |