From 621c05e3b1869a524c1617fe9d1d178af3f7f227 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 9 Nov 2020 17:27:04 +0100 Subject: Don't allow storing types that throw in the destructor in our containers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Types that throw in their destructors are strongly discouraged in C++, and even the STL doesn't define what happens if such types are stored in their containers. Make this more explicit for Qt and disallow storing those types in our containers. This will hopefully preempty any potential future bug reports about us not handling such a case. It also helps simplify some code in QList and other cases and makes it possible to explicitly mark more methods as noexcept. Some care needs to be taken where to add the static asserts, so that we don't disallow forward declarations of types stored in containers. Place the static assert into the destructor of the container where possible or otherwise into the templated d-pointer. Change-Id: If3aa40888f668d0f1b6c6b3ad4862b169d31280e Reviewed-by: Thiago Macieira Reviewed-by: Andrei Golubev Reviewed-by: MÃ¥rten Nordheim --- src/corelib/tools/qflatmap_p.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/corelib/tools/qflatmap_p.h') diff --git a/src/corelib/tools/qflatmap_p.h b/src/corelib/tools/qflatmap_p.h index bf0efb2543..1b3eaea01c 100644 --- a/src/corelib/tools/qflatmap_p.h +++ b/src/corelib/tools/qflatmap_p.h @@ -109,6 +109,8 @@ template, class KeyContainer class MappedContainer = QList> class QFlatMap : private QFlatMapValueCompare { + static_assert(std::is_nothrow_destructible_v, "Types with throwing destructors are not supported in Qt containers."); + using full_map_t = QFlatMap; template -- cgit v1.2.3