When std::set<>::iterator
is uninitialized, it is not equal to any other iterator in the set, but it is equal to other uninitialized iterators.
Is this GCC-specific implementation? (Is the uninitialized iterator actually initialized to an invalid value?)
#include <stdio.h>
#include <iostream>
#include <set>
#include <vector>
int main()
{
std::set<int> s;
std::set<int>::reverse_iterator inv = s.rend();
std::cout << (inv == s.rend()) << "\n";
std::cout << (inv == s.rbegin()) << "\n";
s.insert(5);
std::cout << (inv == s.rend()) << "\n";
std::cout << (inv == s.rbegin()) << "\n";
// invalidate
inv = std::set<int>::reverse_iterator();
std::cout << (inv == s.rend()) << "\n";
std::cout << (inv == s.rbegin()) << "\n";
auto inv2 = std::set<int>::reverse_iterator();
std::cout << (inv == inv2) << "!!!\n";
return 0;
}
prints:
1
1
0
1
0
0
1!!!
Live example: https://onlinegdb.com/r1--46u_B