Установленная идиома для вызова swap:
using std::swap
swap(foo, bar);
Таким образом, swap может быть перегружен для пользовательских типов вне пространства имен std.
Должны ли мы вызывать begin и end тем же способом?
using std::begin;
using std::end;
some_algorithm(begin(some_container), end(some_container));
Или нужно просто написать:
some_algorithm(std::begin(some_container), std::end(some_container));