template <typename T>
std::shared_ptr<std::vector<T>> BlobPtr<T>::check(std::size_t i, std::string& msg) const
{
	auto ret = wptr.lock();
	if (!ret)
		throw std::runtime_error("Unbound BlobPtr");
	if (i >= ret->size())
		throw std::out_of_range(msg);
	return ret;
}

template <typename T>
BlobPtr<T>& BlobPtr<T>::operator++()
{
	check(curr, std::string("Increment past end"));
	++curr;
	return *this;
}

template <typename T>
BlobPtr<T>& BlobPtr<T>::operator--()
{
	check(curr, "Decrement before begin");
	--curr;
	return *this;
}