Lo standard C++ dice che dovrei essere in grado di confrontare due iteratori STL costruiti in modo predefinito per l'uguaglianza? Gli iteratori costruiti in modo predefinito sono uguali?Confronto tra iteratori costruiti in modo predefinito con operatore ==
voglio quanto segue, utilizzando std :: list per esempio:
void foo(const std::list<int>::iterator iter) {
if (iter == std::list<int>::iterator()) {
// Something
}
}
std::list<int>::iterator i;
foo(i);
Quello che voglio qui è qualcosa come un valore NULL per iteratori, ma non sono sicuro se è legale. Nell'implementazione STL inclusa in Visual Studio 2008, includono asserzioni nell'operatore di std :: list ==() che preclude questo utilizzo. (Controllano che ciascun iteratore sia "posseduto" dallo stesso contenitore e gli iteratori costruiti in modo predefinito non contengano alcun contenitore.) Ciò potrebbe suggerire che non è legale, o forse che sono troppo zelanti.
'boost :: opzionale' 'mi viene in mente. –
MSalters