This adds some additional checks the the C++98-style concept checks for iterators, and removes some bogus checks for mutable iterators. Instead of requiring that the result of dereferencing a mutable iterator is assignable (which is a property of the value type, not required for the iterator) check that the reference type is a non-const reference to the value type. Signed-off-by: Jonathan Wakely libstdc++-v3/ChangeLog: * include/bits/boost_concept_check.h (_ForwardIteratorConcept) (_BidirectionalIteratorConcept, _RandomAccessIteratorConcept): Check result types of iterator operations. (_Mutable_ForwardIteratorConcept): Check that iterator's reference type is a reference to its value type. (_Mutable_BidirectionalIteratorConcept): Do not require the value type to be assignable. (_Mutable_RandomAccessIteratorConcept): Likewise. * testsuite/24_iterators/operations/prev_neg.cc: Adjust dg-error line number. Tested x86_64-linux. Committed to trunk.