From 9c5c21df82372b9d266f6b6bc1cf0edd71337109 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Mon, 21 Jul 2025 19:25:48 +0200 Subject: [PATCH] Simplify removal of messages from RunContext Instead of doing range-based removals, we only erase specific message, because there can never be more than 1 message with the specific ID. --- src/catch2/internal/catch_run_context.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/catch2/internal/catch_run_context.cpp b/src/catch2/internal/catch_run_context.cpp index 6991ddcf..118d37f8 100644 --- a/src/catch2/internal/catch_run_context.cpp +++ b/src/catch2/internal/catch_run_context.cpp @@ -437,13 +437,17 @@ namespace Catch { } void RunContext::popScopedMessage( MessageInfo const& message ) { + // Note: On average, it would probably be better to look for the message + // backwards. However, we do not expect to have to deal with more + // messages than low single digits, so the optimization is tiny, + // and we would have to hand-write the loop to avoid terrible + // codegen of reverse iterators in debug mode. m_messages.erase( - std::remove_if( m_messages.begin(), - m_messages.end(), - [id = message.sequence]( MessageInfo const& msg ) { - return msg.sequence == id; - } ), - m_messages.end() ); + std::find_if( m_messages.begin(), + m_messages.end(), + [id = message.sequence]( MessageInfo const& msg ) { + return msg.sequence == id; + } ) ); } void RunContext::emplaceUnscopedMessage( MessageBuilder&& builder ) {