#include "Handler.hpp" std::vector Handler::tokenizeArguments(const std::string &arguments, const std::string &delimiter) { std::vector tokens{}; auto start = 0U; auto end = arguments.find(delimiter); while (end != std::string::npos) { tokens.emplace_back(arguments.substr(start, end - start)); start = end + delimiter.length(); end = arguments.find(delimiter, start); } tokens.emplace_back(arguments.substr(start, end)); return tokens; } Handler::CommandHandler::CommandHandler(Handler::CommandHandler &&o) noexcept { // this is a copy constructor, disguised as a move constructor.. I am sorry command = o.command; func = o.func; description = o.description; // this is the main problem, any "moved" object will point to the same description TODO: maybe smart pointer can help? payload = o.payload; } Handler::json Handler::CommandHandler::exec(const std::string &arguments, const std::string &session) const { return func(arguments, session, payload); } Handler::CommandHandler::CommandHandler(std::string command, Handler::handler_function func, std::vector *description, void *payload) : command{std::move(command)}, func{std::move(func)}, description{description}, payload{payload} {}