<memory>
: Fix constraints of shared_ptr
's constructors when the involved pointer type would be invalid
#4290
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.
There are weird things in [util.smartptr.shared.const]/3 and [util.smartptr.shared.const]/9.1:
Y(*)[N]
orY(*)[]
is not necessary a valid type, e.g. whenY
isT[]
or a function type, which means that the constraints themselves can be sometimes ill-formed.Presumably there should be substitution failures in such cases (instead of hard errors or UB/IFNDR). I've tried to submit an LWG issue for this.
void_t<decltype(static_cast<_Yty (*)[]>(nullptr))>
works whilevoid_t<_Yty (*)[]>
doesn't for MSVC. Reported DevCom-10548086.Unblocks 2 libcxx tests:
std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer.pass.cpp
std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer.pass.cpp