From 1c9e3f220c1dcd7d3785f83fb1c71927d8515eff Mon Sep 17 00:00:00 2001 From: Steve Cotton Date: Fri, 14 Jun 2024 14:42:18 +0200 Subject: [PATCH] Fix dangling reference warnings about refs to iterators These are causing warnings with GCC-14. An iterator can often be a struct containing a single pointer, so creating a reference to such a small struct doesn't make sense. The structure returned by child_range is likely to be exactly two pointers, so it's not a burden to keep it even though back() has already finished accessing the child_iterator. (cherry picked from commit 087fa65dc5ee34ce82a747935ceb11a4b327ea25) --- src/gui/dialogs/unit_advance.cpp | 3 ++- src/help/help_impl.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/dialogs/unit_advance.cpp b/src/gui/dialogs/unit_advance.cpp index 1f9ef5baa04..e49c4d4b4ca 100644 --- a/src/gui/dialogs/unit_advance.cpp +++ b/src/gui/dialogs/unit_advance.cpp @@ -63,7 +63,8 @@ void unit_advance::pre_show(window& window) // This checks if we've finished iterating over the last unit type advancements // and are into the modification-based advancements. if(i >= last_real_advancement_) { - const auto& back = sample.get_modifications().child_range("advancement").back(); + const auto range = sample.get_modifications().child_range("advancement"); + const auto& back = range.back(); if(back.has_attribute("image")) { image_string = back["image"].str(); diff --git a/src/help/help_impl.cpp b/src/help/help_impl.cpp index 9a21fa40fc7..ba8860190ff 100644 --- a/src/help/help_impl.cpp +++ b/src/help/help_impl.cpp @@ -1313,7 +1313,7 @@ const topic *find_topic(const section &sec, const std::string &id) const section *find_section(const section &sec, const std::string &id) { - const auto &sit = + const auto sit = std::find_if(sec.sections.begin(), sec.sections.end(), has_id(id)); if (sit != sec.sections.end()) { return &*sit;