QFlags: don't provide a constructor from void**

Use a pointer-to-member instead of void** for Zero, the type that is
used to accept only a literal 0, but not other ints, as QFlags ctor
arguments.

This was developed while trying to find the cause for a build failure
in the qCompare<QIcon> specialisation after adding underlying-enum
detection to QFlags, and it didn't help, but I think it's a saver
alternative to void**, in particular since the ctor in question is
implicit.

Change-Id: I71c67b0b50e9404e4e42836d09d62663296f58af
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
This commit is contained in:
Marc Mutz 2012-09-20 16:21:30 +02:00 committed by The Qt Project
parent 7121bcca2d
commit a2d1cb87a0

View File

@ -77,7 +77,8 @@ Q_DECL_CONSTEXPR inline QIncompatibleFlag::QIncompatibleFlag(int ai) : i(ai) {}
template<typename Enum>
class QFlags
{
typedef void **Zero;
struct Private;
typedef int (Private::*Zero);
int i;
public:
typedef Enum enum_type;