summaryrefslogtreecommitdiffstats
path: root/src/concurrent/qtconcurrentcompilertest.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/concurrent/qtconcurrentcompilertest.h')
-rw-r--r--src/concurrent/qtconcurrentcompilertest.h28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/concurrent/qtconcurrentcompilertest.h b/src/concurrent/qtconcurrentcompilertest.h
index 72cf1670a0..8292d5c504 100644
--- a/src/concurrent/qtconcurrentcompilertest.h
+++ b/src/concurrent/qtconcurrentcompilertest.h
@@ -48,16 +48,26 @@ QT_BEGIN_NAMESPACE
namespace QtPrivate {
-template<class T>
-class HasResultType {
- typedef char Yes;
- typedef void *No;
- template<typename U> static Yes test(int, const typename U::result_type * = nullptr);
- template<typename U> static No test(double);
-public:
- enum { Value = (sizeof(test<T>(0)) == sizeof(Yes)) };
-};
+ template <class T, typename = void>
+ struct IsIterable : std::false_type {};
+ template <class T>
+ struct IsIterable<T, std::void_t<decltype(std::begin(std::declval<T>())),
+ decltype(std::end(std::declval<T>()))>>
+ : std::true_type
+ { };
+ template <class T>
+ inline constexpr bool IsIterableValue = IsIterable<T>::value;
+
+ template <class T, typename = void>
+ struct IsDereferenceable : std::false_type {};
+ template <class T>
+ struct IsDereferenceable<T, std::void_t<decltype(*std::declval<T>())>>
+ : std::true_type
+ { };
+
+ template <class T>
+ inline constexpr bool IsDereferenceableValue = IsDereferenceable<T>::value;
}
QT_END_NAMESPACE