https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67595
--- Comment #5 from Casey Carter <Casey at Carter dot net> --- The original program submission is ill-formed due to the requirement on line 270 being poorly designed: requires std::is_same<decltype(x - (x - x)), decltype(x += (x - x))>::value; for a random access iterator x, "x - (x - x)" is typically a prvalue of the same type as x, whereas "x += (x - x)" is typically an lvalue of that type. X and X& are obviously not the same type.