summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/global/qflags.h2
-rw-r--r--src/corelib/serialization/qdatastream.h9
2 files changed, 7 insertions, 4 deletions
diff --git a/src/corelib/global/qflags.h b/src/corelib/global/qflags.h
index cf0cd4b155..2319a78877 100644
--- a/src/corelib/global/qflags.h
+++ b/src/corelib/global/qflags.h
@@ -97,8 +97,6 @@ class QFlags
struct Private;
typedef int (Private::*Zero);
#endif
- template <typename E> friend QDataStream &operator>>(QDataStream &, QFlags<E> &);
- template <typename E> friend QDataStream &operator<<(QDataStream &, QFlags<E>);
public:
#if defined(Q_CC_MSVC) || defined(Q_CLANG_QDOC)
// see above for MSVC
diff --git a/src/corelib/serialization/qdatastream.h b/src/corelib/serialization/qdatastream.h
index 93eaaff43b..3a234ab15e 100644
--- a/src/corelib/serialization/qdatastream.h
+++ b/src/corelib/serialization/qdatastream.h
@@ -396,11 +396,16 @@ inline QDataStream &QDataStream::operator<<(quint64 i)
template <typename Enum>
inline QDataStream &operator<<(QDataStream &s, QFlags<Enum> e)
-{ return s << e.i; }
+{ return s << typename QFlags<Enum>::Int(e); }
template <typename Enum>
inline QDataStream &operator>>(QDataStream &s, QFlags<Enum> &e)
-{ return s >> e.i; }
+{
+ typename QFlags<Enum>::Int i;
+ s >> i;
+ e = QFlag(i);
+ return s;
+}
template <typename T>
typename std::enable_if_t<std::is_enum<T>::value, QDataStream &>