Fix compilation error while instantiating operator<< explicitly
Task-number: QTBUG-47375 Change-Id: Ibd260de88c174c1aa3833a56b153b8b74d337338 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
150aa19042
commit
f01f1943e4
@ -278,7 +278,7 @@ template <class T>
|
||||
inline typename QtPrivate::QEnableIf<
|
||||
QtPrivate::IsQEnumHelper<T>::Value || QtPrivate::IsQEnumHelper<QFlags<T> >::Value,
|
||||
QDebug>::Type
|
||||
operator<<(QDebug debug, const QFlags<T> &flags)
|
||||
qt_QMetaEnum_flagDebugOperator_helper(QDebug debug, const QFlags<T> &flags)
|
||||
{
|
||||
const QMetaObject *obj = qt_getEnumMetaObject(T());
|
||||
const char *name = qt_getEnumName(T());
|
||||
@ -289,10 +289,10 @@ template <class T>
|
||||
inline typename QtPrivate::QEnableIf<
|
||||
!QtPrivate::IsQEnumHelper<T>::Value && !QtPrivate::IsQEnumHelper<QFlags<T> >::Value,
|
||||
QDebug>::Type
|
||||
operator<<(QDebug debug, const QFlags<T> &flags)
|
||||
qt_QMetaEnum_flagDebugOperator_helper(QDebug debug, const QFlags<T> &flags)
|
||||
#else // !QT_NO_QOBJECT
|
||||
template <class T>
|
||||
inline QDebug operator<<(QDebug debug, const QFlags<T> &flags)
|
||||
inline QDebug qt_QMetaEnum_flagDebugOperator_helper(QDebug debug, const QFlags<T> &flags)
|
||||
#endif
|
||||
{
|
||||
QDebugStateSaver saver(debug);
|
||||
@ -312,6 +312,14 @@ inline QDebug operator<<(QDebug debug, const QFlags<T> &flags)
|
||||
return debug;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline QDebug operator<<(QDebug debug, const QFlags<T> &flags)
|
||||
{
|
||||
// We have to use an indirection otherwise specialisation of some other overload of the
|
||||
// operator<< the compiler would try to instantiate QFlags<T> for the QEnableIf
|
||||
return qt_QMetaEnum_flagDebugOperator_helper(debug, flags);
|
||||
}
|
||||
|
||||
#ifdef Q_OS_MAC
|
||||
|
||||
// We provide QDebug stream operators for commonly used Core Foundation
|
||||
|
@ -625,5 +625,14 @@ void tst_QDebug::threadSafety() const
|
||||
}
|
||||
}
|
||||
|
||||
// Should compile: instentiation of unrelated operator<< should not cause cause compilation
|
||||
// error in QDebug operators (QTBUG-47375)
|
||||
class TestClassA {};
|
||||
class TestClassB {};
|
||||
|
||||
template <typename T>
|
||||
TestClassA& operator<< (TestClassA& s, T&) { return s; };
|
||||
template<> TestClassA& operator<< <TestClassB>(TestClassA& s, TestClassB& l);
|
||||
|
||||
QTEST_MAIN(tst_QDebug);
|
||||
#include "tst_qdebug.moc"
|
||||
|
Loading…
Reference in New Issue
Block a user