Я заметил, что невозможно передать неконстантную ссылку в качестве аргумента std::async
.
#include <functional>
#include <future>
void foo(int& value) {}
int main() {
int value = 23;
std::async(foo, value);
}
Мой компилятор (GCC 4.8.1) дает следующую ошибку для этого примера:
error: no type named ‘type’ in ‘class std::result_of<void (*(int))(int&)>’
Но если я переношу значение, переданное в std::async
в std::reference_wrapper
, все в порядке. Я предполагаю, что это потому, что std::async
принимает аргументы по значению, но я до сих пор не понимаю причины ошибки.