25

Why has std::swap been moved to the <utility> header for C++11?

N3290 C.2.7 says:

17.6.3.2

Effect on original feature: Function swap moved to a different header

Rationale: Remove dependency on <algorithm>for swap.

Effect on original feature: Valid C++ 2003 code that has been compiled expecting swap to be in <algorithm> may have to instead include <utility>.

I can't understand the part in bold. What kind of dependency is being talked about and why?

TylerH
  • 20,799
  • 66
  • 75
  • 101
Prasoon Saurav
  • 91,295
  • 49
  • 239
  • 345

1 Answers1

39

The committee wanted to allow you to use swap() without introducing a compile-time dependency on the large and more complex <algorithm> header file. Because swap() is so widely used, it makes sense to let you pull in its definition with as little additional baggage as possible; this will generally lead to faster compile times for files that don't otherwise need <algorithm>. Its new home allows it to be used without introducing unneeded overhead.

Ernest Friedman-Hill
  • 80,601
  • 10
  • 150
  • 186
  • All nice and good for Linux based systems, but Microsoft waits years before implementing C++ standards (maybe even this one?). – Top-Master Sep 21 '22 at 10:04