diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-07-26 17:14:07 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-08-11 20:09:55 +0000 |
commit | 10a88b8149e7699b08871a8a62892ac0f39b54f2 (patch) | |
tree | af6a5d6243afa87ed3610369d795ad0890190a78 /src/corelib/io/qdebug.h | |
parent | 9c9f98f2ff255da3e9a3ccdb81a82c53a105c8f9 (diff) |
Add debug output for single enum flags
They have a separate type that we can't recognize directly, but we
can check if we can recognize the QFlags<T> form, though we have to
add a lot of template-conditions to avoid triggering QFlags static
asserts.
Change-Id: I00853682c5376dd3cc411ff151f47bce2389e277
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src/corelib/io/qdebug.h')
-rw-r--r-- | src/corelib/io/qdebug.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/corelib/io/qdebug.h b/src/corelib/io/qdebug.h index ee8ef679a9..ae1869f89e 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<T>::Int(value), obj, name); } +template<typename T, + typename A = typename std::enable_if<std::is_enum<T>::value, void>::type, + typename B = typename std::enable_if<sizeof(T) <= sizeof(int), void>::type, + typename C = typename std::enable_if<!QtPrivate::IsQEnumHelper<T>::Value, void>::type, + typename D = typename std::enable_if<QtPrivate::IsQEnumHelper<QFlags<T>>::Value, void>::type> +inline QDebug operator<<(QDebug dbg, T value) +{ + typedef QFlags<T> 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 <class T> inline typename std::enable_if< QtPrivate::IsQEnumHelper<T>::Value || QtPrivate::IsQEnumHelper<QFlags<T> >::Value, |