diff --git a/src/concurrent/qtconcurrentfunctionwrappers.h b/src/concurrent/qtconcurrentfunctionwrappers.h
index 0f9eb46999..1440d84859 100644
--- a/src/concurrent/qtconcurrentfunctionwrappers.h
+++ b/src/concurrent/qtconcurrentfunctionwrappers.h
@@ -268,10 +268,11 @@ struct ReduceResultType<T(C::*)(U) noexcept>
 };
 #endif
 
-template <class InputSequence, class MapFunctor>
+template <class InputIterator, class MapFunctor>
 struct MapResultType
 {
-    typedef typename LazyResultType<MapFunctor>::Type ResultType;
+    using ResultType = decltype(std::declval<MapFunctor>()(*std::declval<InputIterator>()));
+//     typedef typename LazyResultType<MapFunctor, InputIterator>::Type ResultType;
 };
 
 template <class U, class V>
diff --git a/src/concurrent/qtconcurrentmap.h b/src/concurrent/qtconcurrentmap.h
index ed1f7cedd1..ef560b305b 100644
--- a/src/concurrent/qtconcurrentmap.h
+++ b/src/concurrent/qtconcurrentmap.h
@@ -76,7 +76,8 @@ QFuture<ResultType> mappedReduced(const Sequence &sequence,
                                   ReduceFunctor reduce,
                                   ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
 {
-    return startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, ResultType>
+    using MapResultType = typename QtPrivate::MapResultType<decltype(sequence.begin()), MapFunctor>::ResultType;
+    return startMappedReduced<MapResultType, ResultType>
         (sequence,
          QtPrivate::createFunctionWrapper(map),
          QtPrivate::createFunctionWrapper(reduce),
@@ -89,7 +90,7 @@ QFuture<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType> mappedR
                                   ReduceFunctor reduce,
                                   ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
 {
-    return startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
+    return startMappedReduced<typename QtPrivate::MapResultType<decltype(sequence.begin()), MapFunctor>::ResultType, typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
         (sequence,
          QtPrivate::createFunctionWrapper(map),
          QtPrivate::createFunctionWrapper(reduce),
@@ -104,7 +105,7 @@ QFuture<ResultType> mappedReduced(Iterator begin,
                                   ReduceFunctor reduce,
                                   ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
 {
-    return startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, ResultType>
+    return startMappedReduced<typename QtPrivate::MapResultType<Iterator, MapFunctor>::ResultType, ResultType>
         (begin, end,
          QtPrivate::createFunctionWrapper(map),
          QtPrivate::createFunctionWrapper(reduce),
@@ -118,7 +119,7 @@ QFuture<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType> mappedR
                                   ReduceFunctor reduce,
                                   ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
 {
-    return startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
+    return startMappedReduced<typename QtPrivate::MapResultType<Iterator, MapFunctor>::ResultType, typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
         (begin, end,
          QtPrivate::createFunctionWrapper(map),
          QtPrivate::createFunctionWrapper(reduce),
@@ -127,16 +128,16 @@ QFuture<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType> mappedR
 
 // mapped() for sequences
 template <typename Sequence, typename MapFunctor>
-QFuture<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType> mapped(const Sequence &sequence, MapFunctor map)
+QFuture<typename QtPrivate::MapResultType<decltype(std::declval<Sequence>().begin()), MapFunctor>::ResultType> mapped(const Sequence &sequence, MapFunctor map)
 {
-    return startMapped<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType>(sequence, QtPrivate::createFunctionWrapper(map));
+    return startMapped<typename QtPrivate::MapResultType<decltype(sequence.begin()), MapFunctor>::ResultType>(sequence, QtPrivate::createFunctionWrapper(map));
 }
 
 // mapped() for iterator ranges.
 template <typename Iterator, typename MapFunctor>
-QFuture<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType> mapped(Iterator begin, Iterator end, MapFunctor map)
+QFuture<typename QtPrivate::MapResultType<Iterator, MapFunctor>::ResultType> mapped(Iterator begin, Iterator end, MapFunctor map)
 {
-    return startMapped<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType>(begin, end, QtPrivate::createFunctionWrapper(map));
+    return startMapped<typename QtPrivate::MapResultType<Iterator, MapFunctor>::ResultType>(begin, end, QtPrivate::createFunctionWrapper(map));
 }
 
 // blockingMap() for sequences
@@ -160,7 +161,9 @@ ResultType blockingMappedReduced(const Sequence &sequence,
                                  ReduceFunctor reduce,
                                  ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
 {
-    return QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, ResultType>
+    using MapResultType = typename QtPrivate::MapResultType<decltype(sequence.begin()), MapFunctor>::ResultType;
+    static_assert(!std::is_same<void, MapResultType>::value);
+    return QtConcurrent::startMappedReduced<MapResultType, ResultType>
         (sequence,
          QtPrivate::createFunctionWrapper(map),
          QtPrivate::createFunctionWrapper(reduce),
@@ -174,7 +177,7 @@ typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType blockingMappedRe
                                  ReduceFunctor reduce,
                                  ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
 {
-    return QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
+    return QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<decltype(sequence.begin()), MapFunctor>::ResultType, typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
         (sequence,
          QtPrivate::createFunctionWrapper(map),
          QtPrivate::createFunctionWrapper(reduce),
@@ -190,7 +193,7 @@ ResultType blockingMappedReduced(Iterator begin,
                                  ReduceFunctor reduce,
                                  QtConcurrent::ReduceOptions options = QtConcurrent::ReduceOptions(QtConcurrent::UnorderedReduce | QtConcurrent::SequentialReduce))
 {
-    return QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, ResultType>
+    return QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<Iterator, MapFunctor>::ResultType, ResultType>
         (begin, end,
          QtPrivate::createFunctionWrapper(map),
          QtPrivate::createFunctionWrapper(reduce),
@@ -205,7 +208,7 @@ typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType blockingMappedRe
                                  ReduceFunctor reduce,
                                  QtConcurrent::ReduceOptions options = QtConcurrent::ReduceOptions(QtConcurrent::UnorderedReduce | QtConcurrent::SequentialReduce))
 {
-    return QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType, typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
+    return QtConcurrent::startMappedReduced<typename QtPrivate::MapResultType<Iterator, MapFunctor>::ResultType, typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
         (begin, end,
          QtPrivate::createFunctionWrapper(map),
          QtPrivate::createFunctionWrapper(reduce),
@@ -225,9 +228,9 @@ OutputSequence blockingMapped(const InputSequence &sequence, MapFunctor map)
 }
 
 template <typename MapFunctor, typename InputSequence>
-typename QtPrivate::MapResultType<InputSequence, MapFunctor>::ResultType blockingMapped(const InputSequence &sequence, MapFunctor map)
+typename QtPrivate::MapResultType<decltype(std::declval<InputSequence>().begin()), MapFunctor>::ResultType blockingMapped(const InputSequence &sequence, MapFunctor map)
 {
-    typedef typename QtPrivate::MapResultType<InputSequence, MapFunctor>::ResultType OutputSequence;
+    typedef typename QtPrivate::MapResultType<decltype(std::declval<InputSequence>().begin()), MapFunctor>::ResultType OutputSequence;
     return blockingMappedReduced<OutputSequence>
         (sequence,
          QtPrivate::createFunctionWrapper(map),
diff --git a/src/concurrent/qtconcurrentmapkernel.h b/src/concurrent/qtconcurrentmapkernel.h
index e8df668791..913e54edec 100644
--- a/src/concurrent/qtconcurrentmapkernel.h
+++ b/src/concurrent/qtconcurrentmapkernel.h
@@ -109,7 +109,8 @@ public:
 
     bool runIteration(Iterator it, int index, ReducedResultType *) override
     {
-        IntermediateResults<typename MapFunctor::result_type> results;
+        using ResultType = typename QtPrivate::MapResultType<Iterator, MapFunctor>::ResultType;
+        IntermediateResults<ResultType> results;
         results.begin = index;
         results.end = index + 1;
 
@@ -120,7 +121,8 @@ public:
 
     bool runIterations(Iterator sequenceBeginIterator, int begin, int end, ReducedResultType *) override
     {
-        IntermediateResults<typename MapFunctor::result_type> results;
+        using ResultType = typename QtPrivate::MapResultType<Iterator, MapFunctor>::ResultType;
+        IntermediateResults<ResultType> results;
         results.begin = begin;
         results.end = end;
         results.vector.reserve(end - begin);
