|  | 
        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.