X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1fd762bbcbc15aa4ffafe2d15df5cb650d1fa1ff..6349eaf761d8c7b80db00d48217890c20931964e:/include/xbt/functional.hpp diff --git a/include/xbt/functional.hpp b/include/xbt/functional.hpp index 9ca66f816e..d66763d7d9 100644 --- a/include/xbt/functional.hpp +++ b/include/xbt/functional.hpp @@ -27,7 +27,6 @@ namespace simgrid { namespace xbt { template class MainFunction { -private: F code_; std::shared_ptr> args_; @@ -109,8 +108,6 @@ template class Task; */ template class Task { -private: - // Placeholder for some class type: struct whatever {}; @@ -189,18 +186,17 @@ public: } private: - template typename std::enable_if()>::type init(F code) { const static TaskVtable vtable { // Call: - [](TaskUnion& buffer, Args... args) { + [](TaskUnion& buffer, Args&&... args) { F* src = reinterpret_cast(&buffer); F code = std::move(*src); src->~F(); - return code(std::forward(args)...); + return code(std::move(args)...); }, // Destroy: std::is_trivially_destructible::value ? @@ -225,10 +221,10 @@ private: { const static TaskVtable vtable { // Call: - [](TaskUnion& buffer, Args... args) { + [](TaskUnion& buffer, Args&&... args) { // Delete F when we go out of scope: std::unique_ptr code(*reinterpret_cast(&buffer)); - return (*code)(std::forward(args)...); + return (*code)(std::move(args)...); }, // Destroy: [](TaskUnion& buffer) { @@ -248,19 +244,18 @@ public: operator bool() const { return vtable_ != nullptr; } bool operator!() const { return vtable_ == nullptr; } - R operator()(Args... args) + R operator()(Args&&... args) { if (vtable_ == nullptr) throw std::bad_function_call(); const TaskVtable* vtable = vtable_; vtable_ = nullptr; - return vtable->call(buffer_, std::forward(args)...); + return vtable->call(buffer_, std::move(args)...); } }; template class TaskImpl { -private: F code_; std::tuple args_; typedef decltype(simgrid::xbt::apply(std::move(code_), std::move(args_))) result_type; @@ -281,15 +276,6 @@ template auto make_task(F code, Args... args) -> Task(std::move(task)); } -// Deprecated -template -XBT_ATTRIB_DEPRECATED_v323("Please use make_task()") auto makeTask(F code, Args... args) - -> Task -{ - TaskImpl task(std::move(code), std::make_tuple(std::move(args)...)); - return Task(std::move(task)); -} - } // namespace xbt } // namespace simgrid #endif