Quick Sort Implementation with iterators
You have done a great job.  Here’s my suggestions:


Sort the include directives in alphabetical order. 
Instead of using the generic name Iter, it may be a good idea to express the random access requirement: something like RandomIt. 
Iterators should be passed by value, not const reference.  Don’t be afraid to copy iterators — they are intended to be lightweight objects that are frequently copied, and passing them by const reference will incur overhead over passing them by value because of the additional indirection. 
It is more logical to use auto piv = std::prev(end);, because int y = x - 1; is more logical then int y = x; --y;, right?  (Of course you can use end - 1, but that may be less efficient if the subtraction operator of the iterator isn’t inlined.)
You can use std::iter_swap instead of manually ADL’ing swap. 
Instead of enforcing &lt;=, consider taking a custom comparator as the standard algorithms do.  (Also note that the standard library facilities always use &lt; as the comparator by default.  &lt;= is not required unless you provide a custom comparator.)


Also, always choosing last element as the pivot can make the code vulnerable to reversely sorted sequences.  You can consider taking a random number generator to randomize the choice if this becomes a problem.