From 66203133e3d68f91a63a8257d736596dceab4e01 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 21 Feb 2022 16:08:27 +0100 Subject: [PATCH] QStringConverter: make explicit what should never have been implicit As a drive-by, remove the GCC 7 constexpr work-around. [ChangeLog][Potentially Source-Incompatible Changes] All QStringEncoder/Decoder constructors are now explicit. Change-Id: I0972e2736115993d44a48e73dbf4b08a1c94bef2 Reviewed-by: Thiago Macieira --- src/corelib/text/qstringconverter.h | 25 ++++++++---------------- src/corelib/text/qstringconverter_base.h | 6 +++--- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/src/corelib/text/qstringconverter.h b/src/corelib/text/qstringconverter.h index 4d2138f143..dcc2b4a433 100644 --- a/src/corelib/text/qstringconverter.h +++ b/src/corelib/text/qstringconverter.h @@ -55,27 +55,20 @@ QT_BEGIN_NAMESPACE -// work around a compiler bug in GCC 7 -#if (defined(Q_CC_GNU) && __GNUC__ == 7) || defined(Q_QDOC) -#define QSTRINGCONVERTER_CONSTEXPR -#else -#define QSTRINGCONVERTER_CONSTEXPR constexpr -#endif - class QStringEncoder : public QStringConverter { protected: - QSTRINGCONVERTER_CONSTEXPR QStringEncoder(const Interface *i) + constexpr explicit QStringEncoder(const Interface *i) : QStringConverter(i) {} public: - QSTRINGCONVERTER_CONSTEXPR QStringEncoder() + constexpr QStringEncoder() : QStringConverter() {} - QSTRINGCONVERTER_CONSTEXPR QStringEncoder(Encoding encoding, Flags flags = Flag::Default) + constexpr explicit QStringEncoder(Encoding encoding, Flags flags = Flag::Default) : QStringConverter(encoding, flags) {} - QStringEncoder(const char *name, Flags flags = Flag::Default) + explicit QStringEncoder(const char *name, Flags flags = Flag::Default) : QStringConverter(name, flags) {} @@ -123,17 +116,17 @@ private: class QStringDecoder : public QStringConverter { protected: - QSTRINGCONVERTER_CONSTEXPR QStringDecoder(const Interface *i) + constexpr explicit QStringDecoder(const Interface *i) : QStringConverter(i) {} public: - QSTRINGCONVERTER_CONSTEXPR QStringDecoder(Encoding encoding, Flags flags = Flag::Default) + constexpr explicit QStringDecoder(Encoding encoding, Flags flags = Flag::Default) : QStringConverter(encoding, flags) {} - QSTRINGCONVERTER_CONSTEXPR QStringDecoder() + constexpr QStringDecoder() : QStringConverter() {} - QStringDecoder(const char *name, Flags f = Flag::Default) + explicit QStringDecoder(const char *name, Flags f = Flag::Default) : QStringConverter(name, f) {} @@ -231,6 +224,4 @@ QByteArray &operator+=(QByteArray &a, const QStringEncoder::DecodedData &b) QT_END_NAMESPACE -#undef QSTRINGCONVERTER_CONSTEXPR - #endif diff --git a/src/corelib/text/qstringconverter_base.h b/src/corelib/text/qstringconverter_base.h index dd84cf8744..23a011d297 100644 --- a/src/corelib/text/qstringconverter_base.h +++ b/src/corelib/text/qstringconverter_base.h @@ -158,13 +158,13 @@ protected: constexpr QStringConverter() : iface(nullptr) {} - constexpr QStringConverter(Encoding encoding, Flags f) + constexpr explicit QStringConverter(Encoding encoding, Flags f) : iface(&encodingInterfaces[int(encoding)]), state(f) {} - constexpr QStringConverter(const Interface *i) + constexpr explicit QStringConverter(const Interface *i) : iface(i) {} - Q_CORE_EXPORT QStringConverter(const char *name, Flags f); + Q_CORE_EXPORT explicit QStringConverter(const char *name, Flags f); public: