diff --git a/src/corelib/io/qdebug.h b/src/corelib/io/qdebug.h index ee8ef679a92..ae1869f89e9 100644 --- a/src/corelib/io/qdebug.h +++ b/src/corelib/io/qdebug.h @@ -376,6 +376,19 @@ operator<<(QDebug dbg, T value) return qt_QMetaEnum_debugOperator(dbg, typename QFlags::Int(value), obj, name); } +template::value, void>::type, + typename B = typename std::enable_if::type, + typename C = typename std::enable_if::Value, void>::type, + typename D = typename std::enable_if>::Value, void>::type> +inline QDebug operator<<(QDebug dbg, T value) +{ + typedef QFlags FlagsT; + const QMetaObject *obj = qt_getEnumMetaObject(FlagsT()); + const char *name = qt_getEnumName(FlagsT()); + return qt_QMetaEnum_debugOperator(dbg, typename FlagsT::Int(value), obj, name); +} + template inline typename std::enable_if< QtPrivate::IsQEnumHelper::Value || QtPrivate::IsQEnumHelper >::Value, diff --git a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp index 9c33dc4c4d6..9855bec5208 100644 --- a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp +++ b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp @@ -1767,6 +1767,11 @@ void tst_QMetaObject::enumDebugStream() QTest::ignoreMessage(QtDebugMsg, "QFlags(MyFlag2|MyFlag3)"); f3 |= MyNamespace::MyClass::MyScopedFlag::MyFlag3; qDebug() << f3; + + // Single flag recognized as enum: + QTest::ignoreMessage(QtDebugMsg, "MyNamespace::MyClass::MyFlag1"); + MyNamespace::MyClass::MyFlag f4 = MyNamespace::MyClass::MyFlag1; + qDebug() << f4; } void tst_QMetaObject::inherits_data()