From d76b2fbe30a503009d33c4df06848d7356fc39a6 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Tue, 3 Apr 2018 18:32:14 +0900 Subject: DirectChatEvent: be careful with range-for over temporaries ...because temporaries returned by temporaries tend to disappear before you enter the loop body (see the bottom of http://en.cppreference.com/w/cpp/language/range-for#Explanation). --- lib/events/directchatevent.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'lib/events') diff --git a/lib/events/directchatevent.cpp b/lib/events/directchatevent.cpp index 7049d967..63d638a3 100644 --- a/lib/events/directchatevent.cpp +++ b/lib/events/directchatevent.cpp @@ -29,8 +29,15 @@ DirectChatEvent::DirectChatEvent(const QJsonObject& obj) QMultiHash DirectChatEvent::usersToDirectChats() const { QMultiHash result; - for (auto it = contentJson().begin(); it != contentJson().end(); ++it) - for (auto roomIdValue: it.value().toArray()) + const auto json = contentJson(); + for (auto it = json.begin(); it != json.end(); ++it) + { + // Beware of range-for's over temporary returned from temporary + // (see the bottom of + // http://en.cppreference.com/w/cpp/language/range-for#Explanation) + const auto roomIds = it.value().toArray(); + for (const auto& roomIdValue: roomIds) result.insert(it.key(), roomIdValue.toString()); + } return result; } -- cgit v1.2.3