Changed lvalue ref to universal ref, fixed random-access iterator requirement