mercredi 5 juillet 2017

Resolve

Can't resolve this instance of calling std::lower_bound from std::async. Example:

#include <vector>
#include <algorithm>
#include <future>
#include <iostream>

int main() {
  std::vector<int> v = {1,3,4,6,7};
  auto res = std::async(std::launch::async, std::lower_bound, v.begin(), v.end(), 4);
  std::cout << *res.get() << std::endl;
  return 0;
}

Compiler output makes it look like it doesn't realize std::launch::async is a launch policy and it should use the async call with the launch policy but I could be wrong.

test.cpp:8:84: error: no matching function for call to ‘async(std::launch, <unresolved overloaded function type>, std::vector<int>::iterator, std::vector<int>::iterator, int)’
res = std::async(std::launch::async, std::lower_bound, v.begin(), v.end(), 3);
                                                                            ^
In file included from test.cpp:3: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:
test.cpp:8:84: note:   couldn't deduce template parameter ‘_Fn’
res = std::async(std::launch::async, std::lower_bound, v.begin(), v.end(), 3);
                                                                          ^
In file included from test.cpp:3: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:
/usr/include/c++/6/future: In substitution of ‘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&& ...) [with _Fn = std::launch; _Args = {}]’:
test.cpp:8:84:   required from here
/usr/include/c++/6/future:1739:5: error: no type named ‘type’ in ‘class std::result_of<std::launch()>’

Aucun commentaire:

Enregistrer un commentaire