Поскольку std::accumulate
- это шаблон, вы должны предоставить параметры шаблона (чтобы разрешить его для определенной функции), прежде чем получить его адрес.
#include <thread>
#include <algorithm>
#include <future>
#include <vector>
#include <numeric>
int main()
{
std::vector<int> vec(1000000, 0);
std::future<int> x = std::async(std::launch::async,
&std::accumulate<std::vector<int>::const_iterator, int>,
vec.begin(), vec.end(), 0);
}
Это что-то вроде гадости, так что вместо этого вы можете использовать лямбду:
std::future<int> x = std::async(std::launch::async,
[&]{ return std::accumulate(vec.begin(), vec.end(), 0); });