Hi, I finished an implementation of dbus::Error. dbus::Error is derived from the POD struct ErrorConst and has no variable members of its own. ErrorConst is just a wrapper around sd_bus_error. struct ErrorConst { sd_bus_error m_error; }; class Error : protected ErrorConst { { ... only functions here... }; This allows to create constexpr errors with static initialization; for example, static constexpr ErrorConst foo_error = { SD_BUS_ERROR_MAKE_CONST("org.example.name", "Error description") }; The member functions of dbus::Error support SD_BUS_ERROR_NULL (default constructor) sd_bus_error_copy (constructing from a ErrorConst (shared), or from an Error that is not shared (deep copy), assignment operator) sd_bus_error_move (move constructor, move assignment operator) sd_bus_error_free (destructor) sd_bus_error_set (constructing from a name with optional message) sd_bus_error_is_set (accessor `is_set`) Finally it can be implicitly be converted to std::error_code! operator std::error_code() const; The latter is the more interesting thing that took 99% of the time to design this ;). You can see this in action here: https://github.com/CarloWood/dbus-task/blob/master/tests/error_test.cxx The idea is that when, for example, you receive a callback with a sd_bus_error* (in the message), that it is easy converted to a std::error_code. For example, int on_reply_concatenate(sd_bus_message* m, void* userdata, sd_bus_error*) { int is_error = sd_bus_message_is_method_error(m, nullptr); if (is_error < 0) THROW_ALERTC(-is_error, "sd_bus_message_is_method_error"); if (is_error) { sd_bus_error const* error = sd_bus_message_get_error(m); dbus::Error dbus_error = error; std::error_code error_code = dbus_error; std::cout << "error_code = " << error_code << " [" << error_code.message() << "]\n"; See https://github.com/CarloWood/dbus-task/blob/master/tests/client_side_concatenate_test.cxx for all the context. Regards, Carlo Wood _______________________________________________ systemd-devel mailing list systemd-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/systemd-devel