Section: 19.2 [std.exceptions], 19.5.8 [syserr.syserr], 31.5.2.2.1 [ios.failure] Status: NAD Submitter: Eelis van der Weegen Opened: 2011-08-16 Last modified: 2023-02-07
Priority: Not Prioritized
View all other issues in [std.exceptions].
View all issues with NAD status.
Discussion:
This is an extension issue for LWG to add constructor overloads that take a
string
by an rvalue reference in order to move the string into the
exception.
[2012, Kona]
Move to NAD.
This was discussed during C++11 standardization, and deemed (at the time) to be a conforming
extension that vendors are free to add, but there seemed no need to call it out in the standard.
Since then it has been noted that the rvalue-reference overloads do not give you the move-semantic
guarantee the proposer is thought to be looking for, as in order to meet the requirements that
copy constructors do not throw (for standard exceptions) the exceptions that store strings must
actually store a reference-counted immutable string, rather than an std::string
internally.
Therefore, an rvalue-reference overload is going to have to allocate memory in exactly the same
way as copying from a const string&
argument.
Proposed resolution: