ADL-proof implementation of range verifying and functor passing components that involve arbitrary types #4402
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.
Towards #140. Fixes #1596. IIUC remaining unqualified
_Adl_verify_range
calls after this PR are not supposed to involve ADL-incompatible iterators.Affected components:
ranges::advance
(non-sized branch)ranges::distance
(non-sized branch)span
constructorscondition_variable::wait_for
Notes:
_STD
-qualification is also made instd::advance
andstd::distance
for consistency, but IIUC these code paths don't handle ADL-incompatible iterators._To_absolute_time
remains unqualified, because valid_Rep
inchrono::duration<_Rep, _Period>
requires_Rep
to be "arithmetic-like" type (although the requirements are unclear), and thus must not be ADL-incompatible.span<holder<incomplete>*>
can't be supported in C++23 mode becauseconst_iterator<_Span_iterator<holder<incomplete>*>>
is ill-formed due to ADL in constraints checking. I guess this might need to be fixed in vNext.