Provide adapter for std::reverse_iterator
to replace boost::reverse_iterator
for proxy reference iterators
#2333
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.
Description of Change(s)
Depends on #2205, #2328
#2205 replaces
std::reverse_iterator
in several but not all instances. The C++ standard statesstd::reverse_iterator::operator->
should return the equivalent ofstd::addressof(operator*())
. For iterators that return proxy types as references (sayPcpNodeRef
), taking the address of a temporary is a problematic operation. The C++20 standard modifies this specification tostd::prev(/*underlying iterator*/).operator->()
. Some compilers are already using the newer specification.This change introduces
Tf_ProxyReferenceReverseIterator
as an adapter forstd::reverse_iterator
that specializesoperator->
to use the C++20 specification, deferring all other operations tostd::reverse_iterator
. When possible, this is explicitly done withusing
directives. However, in many cases, the return and argument types require wrapper methods and functions.This change depends on #2328 due to a bug with the current implementation of
PcpNodeIterator
andstd::prev
.Fixes Issue(s)
std::reverse_iterator
instead ofboost::reverse_iterator
#2202