path: root/src/corelib/global/qtypeinfo.h
diff options
authorMarc Mutz <>2015-01-09 23:51:26 +0100
committerMarc Mutz <>2015-01-10 08:43:02 +0100
commit676cb678cc7826366429761d2b3e57a052c1d868 (patch)
treee77f29fc6dc0113407b14683989221e45e11f263 /src/corelib/global/qtypeinfo.h
parenta627c8628f14ba2b2fbcc908f5d1941ae73f0ad4 (diff)
Remove qSwap specialization from Q_DECLARE_SHARED
The way swapping is supposed to work is: 1. Each type supplies a swap() function or function template in its namespace. Any good STL implementation will find it there through ADL. As will the primary qSwap() template. 2. Each use of swap() in Qt, in particular in template code, should use qSwap() instead of std::swap() or the using+swap-trick, because qSwap() automatically enables ADL. It also has a sophisticated conditional noexcept specification that can be used in the custom swap() functions' own noexcept clause. This change also allows us to convert implicitly-shared classes' member-swap functions to noexcept one at a time, because the specialization will no longer be in conflict with the primary template regarding exception specifications. The primary's specification could, of course, be reused here, but it's complex and if the machinery around it is changed later on, it will not affect Q_DECLARE_SHARED classes. Change-Id: I3389a655a9fd8de370f363c8fcef60269a9f506c Reviewed-by: Olivier Goffart <> Reviewed-by: Thiago Macieira <>
Diffstat (limited to 'src/corelib/global/qtypeinfo.h')
1 files changed, 0 insertions, 2 deletions
diff --git a/src/corelib/global/qtypeinfo.h b/src/corelib/global/qtypeinfo.h
index 1429ad6547..e2b165ccbc 100644
--- a/src/corelib/global/qtypeinfo.h
+++ b/src/corelib/global/qtypeinfo.h
-template <> inline void qSwap<TYPE>(TYPE &value1, TYPE &value2) \
-{ value1.swap(value2); } \
inline void swap(TYPE &value1, TYPE &value2) \
Q_DECL_NOEXCEPT_EXPR(noexcept(value1.swap(value2))) \
{ value1.swap(value2); }