This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of NAD Concepts status.

1085. BidirectionalIterator concept should provide default implementation for post-decrement

Section: 22.2.6 [bidirectional.iterators] Status: NAD Concepts Submitter: Howard Hinnant Opened: 2009-03-22 Last modified: 2016-02-10

Priority: Not Prioritized

View all other issues in [bidirectional.iterators].

View all issues with NAD Concepts status.

Discussion:

Addresses UK 258 [CD1]

A default implementation should be supplied for the post-decrement operator to simplify implementation of iterators by users.

Copy the Effects clause into the concept description as the default implementation. Assumes a default value for postincrement_result.

[ Summit: ]

Howard will open an issue.

[ 2009-06-07 Daniel adds: ]

This issue cannot currently be resolved as suggested, because that would render auto-detection of the return type postdecrement_result invalid, see 1084.

Proposed resolution:

Change 22.2.6 [bidirectional.iterators]:

concept BidirectionalIterator<typename X> : ForwardIterator<X> { 
  MoveConstructible postdecrement_result; 
  requires HasDereference<postdecrement_result> 
        && Convertible<HasDereference<postdecrement_result>::result_type, const value_type&> 
        && Convertible<postdecrement_result, const X&>; 
  X& operator--(X&); 
  postdecrement_result operator--(X& r, int); {
     X tmp = r;
     --r;
     return tmp;
  }
}