[alg.remove]/p1 says:
1 Requires: The type of *first shall satisfy the MoveAssignable requirements (Table 22).
This means that remove/remove_if can only use move assignment to permute the sequence. But then [alg.remove]/p6 (non-normatively) contradicts p1:
6 Note: each element in the range [ret,last), where ret is the returned value, has a valid but unspecified state, because the algorithms can eliminate elements by swapping with or moving from elements that were originally in that range.