James Peach created MESOS-7907: ---------------------------------- Summary: `async` fails to accept mutable lambdas Key: MESOS-7907 URL: https://issues.apache.org/jira/browse/MESOS-7907 Project: Mesos Issue Type: Bug Components: libprocess Reporter: James Peach
{{process::async}} fails to compile when you pass it a mutable lambda. For example: {code} diff --git a/3rdparty/libprocess/src/tests/process_tests.cpp b/3rdparty/libprocess/src/tests/process_tests.cpp index 8d3660070..399462fc2 100644 --- a/3rdparty/libprocess/src/tests/process_tests.cpp +++ b/3rdparty/libprocess/src/tests/process_tests.cpp @@ -1464,6 +1464,9 @@ TEST(ProcessTest, THREADSAFE_Async) // Non-void function that returns a future. EXPECT_EQ("42", async(&itoa1, &i).get().get()); + + int value = 99; + EXPECT_EQ(99, async([value] mutable { return value; })); } {code} Generates this compilation error: {noformat} In file included from ../../../3rdparty/libprocess/src/tests/process_tests.cpp:32:0: ../../../3rdparty/libprocess/include/process/async.hpp: In instantiation of ‘typename std::result_of<F()>::type process::AsyncExecutorProcess::execute(const F&) [with F = ProcessTest_THREADSAFE_Async_Test::TestBody()::<lambda()>; typename std::enable_if<(! std::is_void<typename std::result_of<F()>::type>::value), int>::type <anonymous> = 0; typename std::result_of<F()>::type = int]’: ../../../3rdparty/libprocess/include/process/async.hpp:184:74: required from ‘process::Future<typename std::result_of<F()>::type> process::AsyncExecutor::execute(const F&, typename std::enable_if<(! std::is_void<typename std::result_of<F()>::type>::value)>::type*) [with F = ProcessTest_THREADSAFE_Async_Test::TestBody()::<lambda()>; typename std::result_of<F()>::type = int; typename std::enable_if<(! std::is_void<typename std::result_of<F()>::type>::value)>::type = void]’ ../../../3rdparty/libprocess/include/process/async.hpp:242:35: required from ‘process::Future<typename std::result_of<F()>::type> process::async(const F&, typename std::enable_if<(! std::is_void<typename std::result_of<F()>::type>::value)>::type*) [with F = ProcessTest_THREADSAFE_Async_Test::TestBody()::<lambda()>; typename std::result_of<F()>::type = int; typename std::enable_if<(! std::is_void<typename std::result_of<F()>::type>::value)>::type = void]’ ../../../3rdparty/libprocess/src/tests/process_tests.cpp:1469:3: required from here ../../../3rdparty/libprocess/include/process/async.hpp:87:13: error: no match for call to ‘(const ProcessTest_THREADSAFE_Async_Test::TestBody()::<lambda()>) ()’ return f(); ~^~ {noformat} -- This message was sent by Atlassian JIRA (v6.4.14#64029)