@@ -158,13 +158,13 @@ namespace ST
158158 }
159159
160160 ST_DEPRECATED_IN_3_4 (" Use clear() instead" )
161- buffer<char_T> &operator =(const null_t &) noexcept
161+ buffer<char_T> &operator =(const null_t &) noexcept ST_LIFETIME_BOUND
162162 {
163163 clear ();
164164 return *this ;
165165 }
166166
167- buffer<char_T> &operator =(const buffer<char_T> ©)
167+ buffer<char_T> &operator =(const buffer<char_T> ©) ST_LIFETIME_BOUND
168168 {
169169 if (this == ©)
170170 return *this ;
@@ -186,7 +186,7 @@ namespace ST
186186 return *this ;
187187 }
188188
189- buffer<char_T> &operator =(buffer<char_T> &&move) noexcept
189+ buffer<char_T> &operator =(buffer<char_T> &&move) noexcept ST_LIFETIME_BOUND
190190 {
191191 std::swap (m_chars, move.m_chars );
192192 std::swap (m_size, move.m_size );
@@ -275,16 +275,17 @@ namespace ST
275275 }
276276
277277 ST_NODISCARD
278- char_T *data () noexcept { return m_chars; }
278+ char_T *data () noexcept ST_LIFETIME_BOUND { return m_chars; }
279279
280280 ST_NODISCARD
281- const char_T *data () const noexcept { return m_chars; }
281+ const char_T *data () const noexcept ST_LIFETIME_BOUND { return m_chars; }
282282
283283 ST_NODISCARD
284- const char_T *c_str () const noexcept { return m_chars; }
284+ const char_T *c_str () const noexcept ST_LIFETIME_BOUND { return m_chars; }
285285
286286 ST_NODISCARD
287- const char_T *c_str (const char_T *substitute) const noexcept
287+ const char_T *c_str (const char_T *substitute ST_LIFETIME_BOUND)
288+ const noexcept ST_LIFETIME_BOUND
288289 {
289290 return empty () ? substitute : m_chars;
290291 }
@@ -296,107 +297,113 @@ namespace ST
296297 bool empty () const noexcept { return m_size == 0 ; }
297298
298299 ST_NODISCARD
299- char_T &at (size_t index)
300+ char_T &at (size_t index) ST_LIFETIME_BOUND
300301 {
301302 if (index >= size ())
302303 throw std::out_of_range (" Character index out of range" );
303304 return m_chars[index];
304305 }
305306
306307 ST_NODISCARD
307- const char_T &at (size_t index) const
308+ const char_T &at (size_t index) const ST_LIFETIME_BOUND
308309 {
309310 if (index >= size ())
310311 throw std::out_of_range (" Character index out of range" );
311312 return m_chars[index];
312313 }
313314
314315 ST_NODISCARD
315- char_T &operator [](size_t index) noexcept
316+ char_T &operator [](size_t index) noexcept ST_LIFETIME_BOUND
316317 {
317318 return m_chars[index];
318319 }
319320
320321 ST_NODISCARD
321- const char_T &operator [](size_t index) const noexcept
322+ const char_T &operator [](size_t index) const noexcept ST_LIFETIME_BOUND
322323 {
323324 return m_chars[index];
324325 }
325326
326327 ST_NODISCARD
327- char_T &front () noexcept
328+ char_T &front () noexcept ST_LIFETIME_BOUND
328329 {
329330 return m_chars[0 ];
330331 }
331332
332333 ST_NODISCARD
333- const char_T &front () const noexcept
334+ const char_T &front () const noexcept ST_LIFETIME_BOUND
334335 {
335336 return m_chars[0 ];
336337 }
337338
338339 ST_NODISCARD
339- char_T &back () noexcept
340+ char_T &back () noexcept ST_LIFETIME_BOUND
340341 {
341342 return empty () ? m_chars[0 ] : m_chars[m_size - 1 ];
342343 }
343344
344345 ST_NODISCARD
345- const char_T &back () const noexcept
346+ const char_T &back () const noexcept ST_LIFETIME_BOUND
346347 {
347348 return empty () ? m_chars[0 ] : m_chars[m_size - 1 ];
348349 }
349350
350351 ST_NODISCARD
351- iterator begin () noexcept { return m_chars; }
352+ iterator begin () noexcept ST_LIFETIME_BOUND { return m_chars; }
352353
353354 ST_NODISCARD
354- const_iterator begin () const noexcept { return m_chars; }
355+ const_iterator begin () const noexcept ST_LIFETIME_BOUND { return m_chars; }
355356
356357 ST_NODISCARD
357- const_iterator cbegin () const noexcept { return m_chars; }
358+ const_iterator cbegin () const noexcept ST_LIFETIME_BOUND { return m_chars; }
358359
359360 ST_NODISCARD
360- iterator end () noexcept { return m_chars + m_size; }
361+ iterator end () noexcept ST_LIFETIME_BOUND { return m_chars + m_size; }
361362
362363 ST_NODISCARD
363- const_iterator end () const noexcept { return m_chars + m_size; }
364+ const_iterator end () const noexcept ST_LIFETIME_BOUND
365+ {
366+ return m_chars + m_size;
367+ }
364368
365369 ST_NODISCARD
366- const_iterator cend () const noexcept { return m_chars + m_size; }
370+ const_iterator cend () const noexcept ST_LIFETIME_BOUND
371+ {
372+ return m_chars + m_size;
373+ }
367374
368375 ST_NODISCARD
369- reverse_iterator rbegin () noexcept
376+ reverse_iterator rbegin () noexcept ST_LIFETIME_BOUND
370377 {
371378 return reverse_iterator (end ());
372379 }
373380
374381 ST_NODISCARD
375- const_reverse_iterator rbegin () const noexcept
382+ const_reverse_iterator rbegin () const noexcept ST_LIFETIME_BOUND
376383 {
377384 return const_reverse_iterator (end ());
378385 }
379386
380387 ST_NODISCARD
381- const_reverse_iterator crbegin () const noexcept
388+ const_reverse_iterator crbegin () const noexcept ST_LIFETIME_BOUND
382389 {
383390 return const_reverse_iterator (cend ());
384391 }
385392
386393 ST_NODISCARD
387- reverse_iterator rend () noexcept
394+ reverse_iterator rend () noexcept ST_LIFETIME_BOUND
388395 {
389396 return reverse_iterator (begin ());
390397 }
391398
392399 ST_NODISCARD
393- const_reverse_iterator rend () const noexcept
400+ const_reverse_iterator rend () const noexcept ST_LIFETIME_BOUND
394401 {
395402 return const_reverse_iterator (begin ());
396403 }
397404
398405 ST_NODISCARD
399- const_reverse_iterator crend () const noexcept
406+ const_reverse_iterator crend () const noexcept ST_LIFETIME_BOUND
400407 {
401408 return const_reverse_iterator (cbegin ());
402409 }
@@ -437,6 +444,7 @@ namespace ST
437444 ST_NODISCARD
438445 std::basic_string_view<char_T> view (size_t start = 0 ,
439446 size_t length = ST_AUTO_SIZE) const &
447+ ST_LIFETIME_BOUND
440448 {
441449 if (length == ST_AUTO_SIZE)
442450 length = size () - start;
0 commit comments