fork download
  1. #include <iostream>
  2. #include <future>
  3. #include <numeric>
  4. #include <vector>
  5. #include <list>
  6.  
  7. template <typename It, typename Func>
  8. void map(It first, It last, Func f)
  9. {
  10. while (first != last)
  11. {
  12. f(*first++);
  13. }
  14. }
  15.  
  16. template <typename It, typename MapFunc, typename FoldFunc>
  17. auto map_reduce(It first, It last, MapFunc f1, FoldFunc f2, size_t num_threads)
  18. -> decltype(f2(f1(*first), f1(*first)))
  19. {
  20. size_t block_size = std::distance(first, last) / num_threads;
  21.  
  22. std::vector<std::future<int>> results(num_threads);
  23. for (size_t i = 0; i < num_threads; ++i)
  24. {
  25. results[i] = std::async(map, first, last, f1);
  26. }
  27.  
  28. return 0;
  29. }
  30.  
  31.  
  32. int main()
  33. {
  34. std::list<int> ls = { 1, 2, 3 };
  35. auto sum = map_reduce(ls.begin(), ls.end(),
  36. [](int i) {return i; },
  37. std::plus<int>(),
  38. 3);
  39.  
  40. return 0;
  41. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In instantiation of ‘decltype (f2(f1((* first)), f1((* first)))) map_reduce(It, It, MapFunc, FoldFunc, size_t) [with It = std::_List_iterator<int>; MapFunc = main()::<lambda(int)>; FoldFunc = std::plus<int>; decltype (f2(f1((* first)), f1((* first)))) = int; size_t = long unsigned int]’:
prog.cpp:38:4:   required from here
prog.cpp:25:26: error: no matching function for call to ‘async(<unresolved overloaded function type>, std::_List_iterator<int>&, std::_List_iterator<int>&, main()::<lambda(int)>&)’
   results[i] = std::async(map, first, last, f1);
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
In file included from prog.cpp:2:0:
/usr/include/c++/6/future:1709:5: note: candidate: template<class _Fn, class ... _Args> std::future<typename std::result_of<typename std::decay<_Tp>::type(typename std::decay<_BoundArgs>::type ...)>::type> std::async(std::launch, _Fn&&, _Args&& ...)
     async(launch __policy, _Fn&& __fn, _Args&&... __args)
     ^~~~~
/usr/include/c++/6/future:1709:5: note:   template argument deduction/substitution failed:
prog.cpp:25:26: note:   cannot convert ‘map’ (type ‘<unresolved overloaded function type>’) to type ‘std::launch’
   results[i] = std::async(map, first, last, f1);
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
In file included from prog.cpp:2:0:
/usr/include/c++/6/future:1739:5: note: candidate: template<class _Fn, class ... _Args> std::future<typename std::result_of<typename std::decay<_Tp>::type(typename std::decay<_BoundArgs>::type ...)>::type> std::async(_Fn&&, _Args&& ...)
     async(_Fn&& __fn, _Args&&... __args)
     ^~~~~
/usr/include/c++/6/future:1739:5: note:   template argument deduction/substitution failed:
prog.cpp:25:26: note:   couldn't deduce template parameter ‘_Fn’
   results[i] = std::async(map, first, last, f1);
                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
stdout
Standard output is empty