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()