(not sure it's the right place to post this, but it seems smart_assert is (or will) be part of boost, and I can't get the author email addresses. The article is:
http://www.cuj.com/documents/s=8464/cujcexp0308alexandr/) Here's an excerpt of some code: template< class iterator_type> inline client_ostream_type & operator<<( client_ostream_type & out, const printer_range_t< iterator_type> &val) { out << "Range= [" << &*(val.m_first) << "," << &*( val.m_last) << "); " << "Values= ["; val.m_first and val.m_last are STL iterators. The problem is with *(val.m_last) (or *(val.m_first)): if val.m_last is the end iterator of a container, can we safely dereference it as it is done ? What the standard is saying about that one ? The code works properly with Microsoft STL, but fails using STLPort in debug mode: in this latter case, the program asserts and stops at: reference operator*() const { _STLP_DEBUG_CHECK(_Dereferenceable(*this)) return *this->_M_iterator; } and STLPort outputs in the ouptut window: "STL assertion failure : _Dereferenceable(*this)" So, for STLPort, an iterator pointing to the end of a container can't be dereferenced. That seems judicious to me, but is it in accordance with the standard ? If it's the case, then there is a problem in the smart_assert code. _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost