### Service requirements

A class is a service if it is publicly derived from another service, or if it is a class derived from `io_service::service` and contains a publicly-accessible declaration as follows:

    static io_service::id id;

All services define a one-argument constructor that takes a reference to the `io_service` object that owns the service. This constructor is explicit, preventing its participation in automatic conversions. For example:

    class my_service : public io_service::service
    {
    public:
      static io_service::id id;
      explicit my_service(io_service& ios);
    private:
      virtual void shutdown_service();
      ...
    };

A service's `shutdown_service` member function must cause all copies of user-defined handler objects that are held by the service to be destroyed.