A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[simix] Fix forwarding of function in run_kernel
[simgrid.git]
/
include
/
simgrid
/
simix.hpp
diff --git
a/include/simgrid/simix.hpp
b/include/simgrid/simix.hpp
index 8dc10836e126969de680362686f90750983c7464..25d8a917b94058b9d0a0fc8567ac711b1fe5f13f 100644
(file)
--- a/
include/simgrid/simix.hpp
+++ b/
include/simgrid/simix.hpp
@@
-28,7
+28,7
@@
template<class R, class F>
void fulfill_promise(std::promise<R>& promise, F&& code)
{
try {
void fulfill_promise(std::promise<R>& promise, F&& code)
{
try {
- promise.set_value(
code
());
+ promise.set_value(
std::forward<F>(code)
());
}
catch(...) {
promise.set_exception(std::current_exception());
}
catch(...) {
promise.set_exception(std::current_exception());
@@
-41,7
+41,7
@@
template<class F>
void fulfill_promise(std::promise<void>& promise, F&& code)
{
try {
void fulfill_promise(std::promise<void>& promise, F&& code)
{
try {
-
code
();
+
std::forward<F>(code)
();
promise.set_value();
}
catch(...) {
promise.set_value();
}
catch(...) {
@@
-56,7
+56,7
@@
typename std::result_of<F()>::type kernel(F&& code)
std::promise<R> promise;
simcall_run_kernel([&]{
xbt_assert(SIMIX_is_maestro(), "Not in maestro");
std::promise<R> promise;
simcall_run_kernel([&]{
xbt_assert(SIMIX_is_maestro(), "Not in maestro");
- fulfill_promise(promise,
code
);
+ fulfill_promise(promise,
std::forward<F>(code)
);
});
return promise.get_future().get();
}
});
return promise.get_future().get();
}