I have a problem returning std::vector using std::future and std::async. Why does
#include <iostream>
#include <vector>
#include <functional>
#include <future>
using namespace std;
int main(int argc, char** argv) {
int A = 10;
vector<future<int>> sumarray(A);
for(int i = 0; i < A; i++)
sumarray[i] = async( launch::async, [i] { return i; } );
for(int i = 0; i < A; i++)
cout << sumarray[i].get() << " ";
cout << endl;
}
compilled with g++ -std=c++11 -pthread work as expected printing
0 1 2 3 4 5 6 7 8 9
but
#include <iostream>
#include <vector>
#include <functional>
#include <future>
using namespace std;
int main(int argc, char** argv) {
int A = 10;
int B = 2;
vector<future<vector<int>>> sumarray(A);
for(int i = 0; i < A; i++){
sumarray[i] = async( launch::async, [i,B] {
vector<int> v(B);
for(int j = 0; j < B; j++) v[j] = (j+1)*i;
return v;
});
}
for(int j = 0; j < B; j++)
for(int i = 0; i < A; i++)
cout << sumarray[i].get()[j] << " ";
cout << endl;
}
compiled in the same way throw
terminate called after throwing an instance of 'std::future_error'
what(): No associated state
Is there something wrong with the way I am returning the vector in the lambda function with std::async?