From c71469530406f5d0214ceb1f10c0db051a9eee84 Mon Sep 17 00:00:00 2001 From: Adam Majer Date: Sun, 22 Jun 2014 13:20:48 -0500 Subject: Add support for initializer_list construction in QFlags [ChangeLog][QtCore][QFlags] Added initializer_list constructor Task-number: QTBUG-39786 Change-Id: I36967c67b489c2a893fb031954f46f5243aba2c4 Reviewed-by: Thiago Macieira --- src/corelib/global/qflags.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/corelib/global/qflags.h') diff --git a/src/corelib/global/qflags.h b/src/corelib/global/qflags.h index 9e97724fec..d7b673bc1f 100644 --- a/src/corelib/global/qflags.h +++ b/src/corelib/global/qflags.h @@ -47,6 +47,10 @@ #include #include +#ifdef Q_COMPILER_INITIALIZER_LISTS +#include +#endif + QT_BEGIN_NAMESPACE class QFlag @@ -107,6 +111,11 @@ public: Q_DECL_CONSTEXPR inline QFlags(Zero = 0) : i(0) {} Q_DECL_CONSTEXPR inline QFlags(QFlag f) : i(f) {} +#ifdef Q_COMPILER_INITIALIZER_LISTS + Q_DECL_CONSTEXPR inline QFlags(std::initializer_list flags) + : i(initializer_list_helper(flags.begin(), flags.end())) {} +#endif + inline QFlags &operator&=(int mask) { i &= mask; return *this; } inline QFlags &operator&=(uint mask) { i &= mask; return *this; } inline QFlags &operator&=(Enum mask) { i &= Int(mask); return *this; } @@ -130,6 +139,14 @@ public: Q_DECL_CONSTEXPR inline bool testFlag(Enum f) const { return (i & Int(f)) == Int(f) && (Int(f) != 0 || i == Int(f) ); } private: +#ifdef Q_COMPILER_INITIALIZER_LISTS + Q_DECL_CONSTEXPR static inline Int initializer_list_helper(typename std::initializer_list::const_iterator it, + typename std::initializer_list::const_iterator end) + { + return (it == end ? Int(0) : (Int(*it) | initializer_list_helper(it + 1, end))); + } +#endif + Int i; }; -- cgit v1.2.3