summaryrefslogtreecommitdiffstats
path: root/src/corelib/global/qtypetraits.h
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@theqtcompany.com>2015-06-04 05:56:06 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2015-06-04 05:56:06 +0000
commitccad00121d0a9d703cf715c54347b32bfc33bbfc (patch)
tree8e492f00f9ea81d87ae9126ad06c3dbc21fee3a3 /src/corelib/global/qtypetraits.h
parentdc2617f35be61b4827b8e3d192c85e2feacf7f6a (diff)
parente2f66f921594b7be4af4a058c959557489e86879 (diff)
Merge "Merge remote-tracking branch 'origin/5.5' into dev" into refs/staging/dev
Diffstat (limited to 'src/corelib/global/qtypetraits.h')
-rw-r--r--src/corelib/global/qtypetraits.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/corelib/global/qtypetraits.h b/src/corelib/global/qtypetraits.h
index 3a305713e6..488e257e0f 100644
--- a/src/corelib/global/qtypetraits.h
+++ b/src/corelib/global/qtypetraits.h
@@ -506,6 +506,27 @@ Q_STATIC_ASSERT((!is_unsigned<qint64>::value));
Q_STATIC_ASSERT((!is_signed<quint64>::value));
Q_STATIC_ASSERT(( is_signed<qint64>::value));
+template<class T = void> struct is_default_constructible;
+
+template<> struct is_default_constructible<void>
+{
+protected:
+ template<bool> struct test { typedef char type; };
+public:
+ static bool const value = false;
+};
+template<> struct is_default_constructible<>::test<true> { typedef double type; };
+
+template<class T> struct is_default_constructible : is_default_constructible<>
+{
+private:
+ template<class U> static typename test<!!sizeof(::new U())>::type sfinae(U*);
+ template<class U> static char sfinae(...);
+public:
+ static bool const value = sizeof(sfinae<T>(0)) > 1;
+};
+
+
} // namespace QtPrivate
QT_END_NAMESPACE