From 8cf199077fa3f443fe94d2cb6c8a57efd6ff7869 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Thu, 19 Oct 2023 15:12:29 +0200 Subject: [PATCH] JNI: make converting QJniArray constructors explicit Amend 80d4d55e250af1d643805bde3821987112cf09c1. It should not be possible to convert a QJniArray to e.g. a QJniArray, so SFINAE out any construction that would convert between unconvertible element types. To prevent the fall-back to constructing from QJniObject, make those constructors explicit, which they should have been anyway. Change-Id: I17fd9dfcea425a7bfa34d7bef736bab2be42a536 Reviewed-by: Assam Boudjelthia --- src/corelib/kernel/qjniarray.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/corelib/kernel/qjniarray.h b/src/corelib/kernel/qjniarray.h index 96eaafca83..e5c9bc0e29 100644 --- a/src/corelib/kernel/qjniarray.h +++ b/src/corelib/kernel/qjniarray.h @@ -70,16 +70,16 @@ class QJniArrayBase : public QJniObject > : std::true_type {}; public: - QJniArrayBase(jarray array) + explicit QJniArrayBase(jarray array) : QJniObject(static_cast(array)) { static_assert(sizeof(QJniArrayBase) == sizeof(QJniObject), "QJniArrayBase must have the same size as QJniObject!"); } - QJniArrayBase(const QJniObject &object) + explicit QJniArrayBase(const QJniObject &object) : QJniObject(object) {} - QJniArrayBase(QJniObject &&object) noexcept + explicit QJniArrayBase(QJniObject &&object) noexcept : QJniObject(std::move(object)) {} @@ -157,6 +157,12 @@ public: , std::enable_if_t, bool> = true > explicit QJniArray(Container &&container); + + template , bool> = true> + QJniArray(QJniArray &&other) + : QJniArrayBase(std::forward>(other)) + { + } ~QJniArray() = default; auto arrayObject() const