Block C++98 unexpected()
from being restored in C++23 mode
#2709
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
C++98's
unexpected()
was removed by C++17, then C++23 reused the identifier for<expected>
'sunexpected<E>
(being implemented in #2643).We support escape hatches for restoring Standard-removed machinery, but we need to avoid this conflict. Instead of limiting what C++23 provides, we should simply disable this escape hatch when it conflicts with the Standard. (Note that C++98
unexpected()
and its related functions weren't very useful, and MSVC never properly implemented them, thus this is mostly relevant for library test suites. It's a very different situation thanauto_ptr
, for example.)This PR will be paired with internal changes to VCRuntime, as its
<eh.h>
definesunexpected()
et al. in the global scope, and we need to prevent that conflict too. We can complete this PR independently of #2643.