May std::vector make use of small buffer optimization?

23.2.1 / p10 / b6:

Unless otherwise specified …

  • no swap() function invalidates any references, pointers, or iterators referring to the elements of the containers being swapped.
    …

Nowhere does it “specify otherwise” for vector. So this outlaws the SBO for vector.

string is not bound by this rule because it does “specify otherwise” in 21.4.1/p6:

References, pointers, and iterators referring to the elements of a
basic_string sequence may be invalidated by the following uses of that
basic_string object:

  • as an argument to any standard library function taking a reference to non-const basic_string as an argument.^234

234) For example, as an argument to non-member functions swap()
(21.4.8.8), operator>>() (21.4.8.9), and getline() (21.4.8.9), or as
an argument to basic_string::swap()

Leave a Comment