The _OutputIteratorConcept should be checked using the correct value category. The std::move_backward and std::copy_backward algorithms should use _OutputIteratorConcept instead of _ConvertibleConcept. In order to use the correct value category, the concept should use a function that returns _ValueT instead of using an lvalue data member. Signed-off-by: Jonathan Wakely libstdc++-v3/ChangeLog: * include/bits/boost_concept_check.h (_OutputIteratorConcept): Use a function to preserve value category of the type. * include/bits/stl_algobase.h (copy, move, fill_n): Use a reference as the second argument for _OutputIteratorConcept. (copy_backward, move_backward): Use _OutputIteratorConcept instead of _ConvertibleConcept. Tested x86_64-linux. Committed to trunk.