![]() |
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.