| line | true | false | branch | 
 
| 103 | 0 | 0 | if (!mem) throw std::bad_alloc(); | 
 
| 444 | 0 | 0 | case State::INTERNAL: return _storage.internal->refcnt == 1 ? _capacity_internal() : 0; | 
 
| 445 | 0 | 0 | case State::EXTERNAL: return _storage.external->refcnt == 1 ? _capacity_external() : 0; | 
 
| 880 | 4 | 0 | if (count) { | 
 
| 1137 | 0 | 0 | if (_state == State::LITERAL) return _str; // LITERALs are NT | 
 
| 1138 | 0 | 0 | if (shared_capacity() > _length && _str[_length] == 0) return _str; // if we have r/o space after string, let's see if it's already NT | 
 
|  | 0 | 0 | if (shared_capacity() > _length && _str[_length] == 0) return _str; // if we have r/o space after string, let's see if it's already NT | 
 
|  | 0 | 0 | if (shared_capacity() > _length && _str[_length] == 0) return _str; // if we have r/o space after string, let's see if it's already NT | 
 
| 1140 | 0 | 0 | if (capacity() <= _length) const_cast(this)->_reserve_save(_length + 1); // we're in COW mode or don't have space | 
 
| 1154 | 0 | 0 | if (capacity <= MAX_SSO_CHARS) { | 
 
| 1158 | 0 | 0 | if (capacity > MAX_SIZE) throw std::length_error("basic_string::_new_auto"); | 
 
|  | 0 | 0 | if (capacity > MAX_SIZE) throw std::length_error("basic_string::_new_auto"); | 
 
| 1249 | 0 | 0 | if (oth._state == State::SSO) _str = _sso + (oth._str - oth._sso); | 
 
| 1315 | 0 | 0 | assert(capacity >= _length); | 
 
| 1326 | 0 | 0 | if (capacity < _length) capacity = _length; | 
 
| 1336 | 0 | 0 | if (_storage.internal->refcnt > 1) _detach_cow(capacity); | 
 
| 1337 | 0 | 0 | else if (_storage.internal->capacity < capacity) _internal_realloc(capacity); // need to grow storage | 
 
| 1338 | 0 | 0 | else if (_capacity_internal() < capacity) { // may not to grow storage if str is moved to the beginning | 
 
| 1347 | 0 | 0 | if (_storage.dtor == &Alloc::deallocate && _str == _storage.internal->start) { | 
 
|  | 0 | 0 | if (_storage.dtor == &Alloc::deallocate && _str == _storage.internal->start) { | 
 
| 1348 | 0 | 0 | if (capacity > MAX_SIZE) throw std::length_error("basic_string::_internal_realloc"); | 
 
|  | 0 | 0 | if (capacity > MAX_SIZE) throw std::length_error("basic_string::_internal_realloc"); | 
 
| 1363 | 0 | 0 | if (_storage.external->refcnt > 1) _detach_cow(capacity); | 
 
| 1364 | 0 | 0 | else if (_storage.external->capacity < capacity) _external_realloc(capacity); // need to grow storage, switch to INTERNAL/SSO | 
 
| 1365 | 0 | 0 | else if (_capacity_external() < capacity) { // may not to grow storage if str is moved to the beginning | 
 
| 1381 | 0 | 0 | if (MAX_SSO_CHARS < capacity) { | 
 
| 1385 | 0 | 0 | else if (_capacity_sso() < capacity) { | 
 
| 1492 | 0 | 0 | static void _release_internal (Buffer* buf, dtor_fn dtor)          { if (!--buf->refcnt) _free_internal(buf, dtor); } | 
 
| 1493 | 0 | 0 | static void _release_external (ExternalShared* ebuf, dtor_fn dtor) { if (!--ebuf->refcnt) _free_external(ebuf, dtor); } | 
 
| 1502 | 89 | 3 | if (!r) r = (len1 < len2) ? -1 : (len1 > len2 ? 1 : 0); | 
 
|  | 89 | 0 | if (!r) r = (len1 < len2) ? -1 : (len1 > len2 ? 1 : 0); | 
 
|  | 0 | 89 | if (!r) r = (len1 < len2) ? -1 : (len1 > len2 ? 1 : 0); | 
 
| 1569 | 0 | 0 | if (llen == 0) return rhs; | 
 
| 1570 | 0 | 0 | if (rhs.length() == 0) return basic_string(lhs, llen); |