This requires getting around the dependency on std::string's assign function. I added the following specialization to assign_or_plus_equal to get it working but it could probably be done better.
template<class Iterator, typename char_t>
static void assign(Iterator b, Iterator e, std::basic_string_view<char_t>& t)
{
t = { std::addressof(*b), static_cast<size_t>(std::distance(b, e)) };
}