aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorswarmer <swarmer@yandex-team.com>2024-10-04 21:38:04 +0300
committerswarmer <swarmer@yandex-team.com>2024-10-04 21:48:00 +0300
commit2e23880a876e477acc0b4a853dbe585ea3807aba (patch)
treea26a13fb1c7ed1c29c33faa86d83c50781492acc
parent09d8f48ef2d0a92817d00bb9c8bc3ac795256ded (diff)
downloadydb-2e23880a876e477acc0b4a853dbe585ea3807aba.tar.gz
check lifetime bound of TString const iterators
ex: ``` auto it = TString{"temporary"}.cbegin(); use(*it); ``` commit_hash:68f621e7b2d608340d7b9f5a9a246c138a2eafff
-rw-r--r--util/generic/string.h38
1 files changed, 30 insertions, 8 deletions
diff --git a/util/generic/string.h b/util/generic/string.h
index 5fe507200d..b73c73e625 100644
--- a/util/generic/string.h
+++ b/util/generic/string.h
@@ -325,14 +325,36 @@ public:
return reverse_iterator(begin());
}
- using TBase::begin; //!< const_iterator TStringBase::begin() const
- using TBase::cbegin; //!< const_iterator TStringBase::cbegin() const
- using TBase::cend; //!< const_iterator TStringBase::cend() const
- using TBase::crbegin; //!< const_reverse_iterator TStringBase::crbegin() const
- using TBase::crend; //!< const_reverse_iterator TStringBase::crend() const
- using TBase::end; //!< const_iterator TStringBase::end() const
- using TBase::rbegin; //!< const_reverse_iterator TStringBase::rbegin() const
- using TBase::rend; //!< const_reverse_iterator TStringBase::rend() const
+ const_iterator begin() const noexcept Y_LIFETIME_BOUND {
+ return TBase::begin();
+ }
+ const_iterator cbegin() const noexcept Y_LIFETIME_BOUND {
+ return TBase::cbegin();
+ }
+
+ const_iterator cend() const noexcept Y_LIFETIME_BOUND {
+ return TBase::cend();
+ }
+
+ const_reverse_iterator crbegin() const noexcept Y_LIFETIME_BOUND {
+ return TBase::crbegin();
+ }
+
+ const_reverse_iterator crend() const noexcept Y_LIFETIME_BOUND {
+ return TBase::crend();
+ }
+
+ const_iterator end() const noexcept Y_LIFETIME_BOUND {
+ return TBase::end();
+ }
+
+ const_reverse_iterator rbegin() const noexcept Y_LIFETIME_BOUND {
+ return TBase::rbegin();
+ }
+
+ const_reverse_iterator rend() const noexcept Y_LIFETIME_BOUND {
+ return TBase::rend();
+ }
inline size_t capacity() const noexcept {
#ifdef TSTRING_IS_STD_STRING