From dd987a9ef08933b970387dac1f9bdd930ca9656c Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 28 Jun 2013 14:43:27 -0700 Subject: [PATCH] Add other integer overloads to QFlag's constructor This avoids "change of sign" warnings as found by ICC when the high bit is set. This often happens when you do X & ~Y as ~Y probably has bit 31 on. If the enum is unsigned, then there's a sign conversion. Change-Id: Ia5f221d928ac0155f4504a70c4046e60c25fbf3b Reviewed-by: Kurt Pattyn Reviewed-by: Thiago Macieira --- src/corelib/global/qflags.h | 12 +++++++++--- src/corelib/global/qglobal.cpp | 28 ++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/corelib/global/qflags.h b/src/corelib/global/qflags.h index dd4222b89f..9e97724fec 100644 --- a/src/corelib/global/qflags.h +++ b/src/corelib/global/qflags.h @@ -53,13 +53,19 @@ class QFlag { int i; public: - Q_DECL_CONSTEXPR inline QFlag(int i); +#if !defined(__LP64__) && !defined(Q_QDOC) + Q_DECL_CONSTEXPR inline QFlag(long ai) : i(int(ai)) {} + Q_DECL_CONSTEXPR inline QFlag(ulong ai) : i(int(long(ai))) {} +#endif + Q_DECL_CONSTEXPR inline QFlag(int ai) : i(ai) {} + Q_DECL_CONSTEXPR inline QFlag(uint ai) : i(int(ai)) {} + Q_DECL_CONSTEXPR inline QFlag(short ai) : i(int(ai)) {} + Q_DECL_CONSTEXPR inline QFlag(ushort ai) : i(int(uint(ai))) {} Q_DECL_CONSTEXPR inline operator int() const { return i; } + Q_DECL_CONSTEXPR inline operator uint() const { return uint(i); } }; Q_DECLARE_TYPEINFO(QFlag, Q_PRIMITIVE_TYPE); -Q_DECL_CONSTEXPR inline QFlag::QFlag(int ai) : i(ai) {} - class QIncompatibleFlag { int i; diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index e0a78d8533..e84c31eecf 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -114,12 +114,40 @@ Q_STATIC_ASSERT_X(UCHAR_MAX == 255, "Qt assumes that char is 8 bits"); Constructs a QFlag object that stores the given \a value. */ +/*! + \fn QFlag::QFlag(uint value) + \since Qt 5.3 + + Constructs a QFlag object that stores the given \a value. +*/ + +/*! + \fn QFlag::QFlag(short value) + \since 5.3 + + Constructs a QFlag object that stores the given \a value. +*/ + +/*! + \fn QFlag::QFlag(ushort value) + \since Qt 5.3 + + Constructs a QFlag object that stores the given \a value. +*/ + /*! \fn QFlag::operator int() const Returns the value stored by the QFlag object. */ +/*! + \fn QFlag::operator uint() const + \since Qt 5.3 + + Returns the value stored by the QFlag object. +*/ + /*! \class QFlags \inmodule QtCore