std :: async с использованием ссылки на rvalue, привязанной к лямбде
Я пытаюсь связать ссылку Rvalue лямбда с помощьюstd::bind
, но у меня есть проблемы, когда я бросаю это вstd::async
вызов: (источник)
auto lambda = [] (std::string&& message) {
std::cout << message << std::endl;
};
auto bound = std::bind(lambda, std::string{"hello world"});
auto future = std::async(bound); // Compiler error here
future.get()
Это приводит к ошибке компилятора, я не совсем уверен, как интерпретировать:
ошибка: нет типа с именем 'type' в 'классе std :: result_of (std :: basic_string)> & ()>'
Что тут происходит? Интересно, что небольшая модификация компилируется и работает как положено. Если я изменюstd::string{"hello world"}
к строковому литералу все отлично работает :(источник)
auto lambda = [] (std::string&& message) {
std::cout << message << std::endl;
};
auto bound = std::bind(lambda, "hello world");
auto future = std::async(bound);
future.get(); // Prints "hello world" as expected
Почему это работает, но не первый пример?