### Service requirements

A class is a service if it is publicly and unambiguously derived from `execution_context::service`, or if it is publicly and unambiguously derived from another service. For a service `S`, `S::key_type` shall be valid and denote a type (C++Std [temp.deduct]), `is_base_of_v<typename S::key_type, S>` shall be `true`, and `S` shall satisfy the `Destructible` requirements (C++Std [destructible]).

The first parameter of all service constructors shall be an lvalue reference to `execution_context`. This parameter denotes the `execution_context` object that represents a set of services, of which the service object will be a member. [Note: These constructors may be called by the `make_service` function. —end note]

A service shall provide an explicit constructor with a single parameter of lvalue reference to `execution_context`. [Note: This constructor may be called by the `use_service` function. —end note]

    class my_service : public execution_context::service
    {
    public:
      typedef my_service key_type;
      explicit my_service(execution_context& ctx);
      my_service(execution_context& ctx, int some_value);
    private:
      virtual void shutdown() noexcept override;
      ...
    };

A service's `shutdown` member function shall destroy all copies of user-defined function objects that are held by the service.