|  | Home | Libraries | People | FAQ | More | 
        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.