Hello. I think it is OK as a result of StrBlobPtr::operator+=(size_t n) to get a trailing pointer. So maybe it is better to use the code below.
inline StrBlobPtr& StrBlobPtr::operator+=(size_t n)
{
curr += n;
check(curr - 1, "increment past end of StrBlobPtr"); // changed
return *this;
}
Attached check function code.
inline shared_ptr<vector<string>> StrBlobPtr::check(size_t i, const string &msg) const
{
auto ret = wptr.lock();
if (!ret) throw std::runtime_error("unbound StrBlobPtr");
if (i >= ret->size()) throw std::out_of_range(msg);
return ret;
}
Hello. I think it is OK as a result of
StrBlobPtr::operator+=(size_t n)
to get a trailing pointer. So maybe it is better to use the code below.Attached check function code.