This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++23 status.
service_already_exists
has no usable constructorsSection: 13.7 [networking.ts::async.exec.ctx] Status: C++23 Submitter: Jonathan Wakely Opened: 2020-03-17 Last modified: 2023-11-22
Priority: 0
View all issues with C++23 status.
Discussion:
Addresses: networking.ts
In the Networking TS, the service_already_exists
exception type
has no constructors declared. The logic_error
base class is not
default constructible, so service_already_exists
's implicit default
constructor is defined as deleted.
Implementations can add one or more private constructors that can be used
by make_service
, but there seems to be little benefit to that.
The Boost.Asio type of the same name has a public default constructor.
[2020-04-18 Issue Prioritization]
Status set to Tentatively Ready after six positive votes on the reflector.
[2020-11-09 Approved In November virtual meeting. Status changed: Tentatively Ready → WP.]
Proposed resolution:
This wording is relative to N4734.
Modify 13.7 [networking.ts::async.exec.ctx] p1, as indicated:
// service access template<class Service> typename Service::key_type& use_service(execution_context& ctx); template<class Service, class... Args> Service& make_service(execution_context& ctx, Args&&... args); template<class Service> bool has_service(const execution_context& ctx) noexcept; class service_already_exists : public logic_error{ };{ public: service_already_exists(); };
Add a new subclause after [async.exec.ctx.globals]:
13.7.6 Class
service_already_exists
[async.exec.ctx.except]-1- The class
service_already_exists
defines the type of objects thrown as exceptions to report an attempt to add an existing service to anexecution_context
.service_already_exists();-2- Postconditions:
what()
returns an implementation-defined NTBS.