3986. basic_const_iterator doesn't work with optional

Section: 25.5.3 [const.iterators] Status: New Submitter: Hewill Kang Opened: 2023-08-26 Last modified: 2023-10-30 17:22:20 UTC

Priority: 3

View other active issues in [const.iterators].

View all other issues in [const.iterators].

View all issues with New status.


The heterogeneous comparison operators of basic_const_iterator only constrain type I to be comparable with the underlying iterator type, which allows non-iterator types such as optional, and the heterogeneous comparison operators of the latter would make the situation worse (demo):

#include <iterator>
#include <optional>
int main() {
  std::basic_const_iterator<const int*> it;
  std::optional opt{it};
  auto c = opt < it; // infinite meta-recursion
  auto d = it - opt; // infinite meta-recursion

[2023-10-30; Reflector poll]

Set priority to 3 after reflector poll.

Proposed resolution: