diff options
author | Olivier Goffart <ogoffart@woboq.com> | 2015-11-07 13:16:38 +0100 |
---|---|---|
committer | Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com> | 2015-11-16 19:08:01 +0000 |
commit | 6a2f7aa3ae4b0a1f66fc520ec99616154aaa0cd5 (patch) | |
tree | 98a5bbefcc7538a0eafd318831cdfbde2f0cb4c4 /src/corelib/kernel/qvariant_p.h | |
parent | ae35b2dc62625341517caadca27cc6ec40890f7d (diff) |
QVariantIsNull: remove the non-C++11 implementation
decltype is required now
Change-Id: I69173127bd35f1d29945c8cfa47e1fbf1479c14d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
Diffstat (limited to 'src/corelib/kernel/qvariant_p.h')
-rw-r--r-- | src/corelib/kernel/qvariant_p.h | 39 |
1 files changed, 0 insertions, 39 deletions
diff --git a/src/corelib/kernel/qvariant_p.h b/src/corelib/kernel/qvariant_p.h index d84d702982..986eb2c467 100644 --- a/src/corelib/kernel/qvariant_p.h +++ b/src/corelib/kernel/qvariant_p.h @@ -202,7 +202,6 @@ class QVariantIsNull /// \internal /// This class checks if a type T has method called isNull. Result is kept in the Value property /// TODO Can we somehow generalize it? A macro version? -#if defined(Q_COMPILER_DECLTYPE) // C++11 version template<typename T> class HasIsNullMethod { struct Yes { char unused[1]; }; @@ -214,44 +213,6 @@ class QVariantIsNull public: static const bool Value = (sizeof(test<T>(0)) == sizeof(Yes)); }; -#elif defined(Q_CC_MSVC) && _MSC_VER >= 1400 && !defined(Q_CC_INTEL) // MSVC 2005, 2008 version: no decltype, but 'sealed' classes (>=2010 has decltype) - template<typename T> - class HasIsNullMethod { - struct Yes { char unused[1]; }; - struct No { char unused[2]; }; - Q_STATIC_ASSERT(sizeof(Yes) != sizeof(No)); - - template<class C> static Yes test(char (*)[(&C::isNull == 0) + 1]); - template<class C> static No test(...); - public: - static const bool Value = (sizeof(test<T>(0)) == sizeof(Yes)); - }; -#else // C++98 version (doesn't work for final classes) - template<typename T, bool IsClass = QTypeInfo<T>::isComplex> - class HasIsNullMethod - { - struct Yes { char unused[1]; }; - struct No { char unused[2]; }; - Q_STATIC_ASSERT(sizeof(Yes) != sizeof(No)); - - struct FallbackMixin { bool isNull() const; }; - struct Derived : public T, public FallbackMixin {}; // <- doesn't work for final classes - template<class C, C> struct TypeCheck {}; - - template<class C> static Yes test(...); - template<class C> static No test(TypeCheck<bool (FallbackMixin::*)() const, &C::isNull> *); - public: - static const bool Value = (sizeof(test<Derived>(0)) == sizeof(Yes)); - }; - - // We need to exclude primitive types as they won't compile with HasIsNullMethod::Check classes - // anyway it is not a problem as the types do not have isNull method. - template<typename T> - class HasIsNullMethod<T, /* IsClass = */ false> { - public: - static const bool Value = false; - }; -#endif // TODO This part should go to autotests during HasIsNullMethod generalization. Q_STATIC_ASSERT(!HasIsNullMethod<bool>::Value); |