changeset 838:eda721611955

irccd: use std::invoke in plugin_service::exec
author David Demelier <markand@malikania.fr>
date Fri, 26 Apr 2019 20:52:00 +0200
parents eeb0bc58cd76
children e7709755e557
files libirccd-daemon/irccd/daemon/plugin_service.hpp
diffstat 1 files changed, 2 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/libirccd-daemon/irccd/daemon/plugin_service.hpp	Fri Apr 26 20:47:08 2019 +0200
+++ b/libirccd-daemon/irccd/daemon/plugin_service.hpp	Fri Apr 26 20:52:00 2019 +0200
@@ -210,13 +210,12 @@
 	 * \param args the arguments to pass
 	 */
 	template <typename Func, typename... Args>
-	void exec(std::shared_ptr<plugin> plugin, Func fn, Args&&... args)
+	void exec(std::shared_ptr<plugin> plugin, Func&& fn, Args&&... args)
 	{
 		assert(plugin);
 
-		// TODO: replace with C++17 std::invoke.
 		try {
-			((*plugin).*(fn))(std::forward<Args>(args)...);
+			std::invoke(std::forward<Func>(fn), *plugin, std::forward<Args>(args)...);
 		} catch (const std::exception& ex) {
 			throw plugin_error(plugin_error::exec_error, plugin->get_name(), ex.what());
 		} catch (...) {