Remove useless explicit specifiers.
Remove string_t::window functions.

Beginning the process of just stripping out no-free strings.
Remove non-const-iter forms of insert and index_of.

Really no point to these.
Move string = string_t alias to string.hh.

string_t will probably be renamed to string later.
Remove nofree string_t constructors.

Support for no-free strings really just promoted unsafe code and poor
optimization habits, so they've been removed.
Receive all iterators by-value in string_t functions.

Next: removal of string_iter_t and replacing it with a pointer.
Remove negative indices support for at & subscript.

No good reason to support it.
Replace string_iter_t with char pointers.

Simpler and no less code. Potentially slightly more error prone, but
only if you don't conform to normal iterator usage.
Use size_type, not size_t.

Fixing vestigial size_t usage from before size_type's introduction.
Cast to size_t for buffer_stream_t::write(const string &).

Fixes the issue of string_t possibly using a size_type other than
size_t. Incidentally, it's totally going to use a size_type other than
size_t.
Alias string_t::size_type to int.

Although using size_t makes some sense, it's rarely actually useful.
Basically, the chance of anyone needing a string consisting of more
than 2^31 bytes is sort of really low, at least as far as I'm
concerned, and having to deal with the signed/unsigned difference when
iterating using indices is a pain. So, rather than waste time with
size_t, I'm just going to switch it to int.
Add static_assert to ensure string_t::value_type is char.

Just in case the note about how it mustn't change isn't enough, I'll
just ensure it's a compiler error.
Remove overly fancy string_t::reserve() code.

Actual usage shows this is pointless and stupid.
Use reinterpret_cast in string_t::find_char

Trying to avoid C-style casts where it makes sense to do so.
Replace substring search with linear substring search.

Avoids allocations in a string search, which is preferable now. Makes
it slightly slower in large strings but I'd like to keep allocations to
a minimum now.
Shorten can_free call.

Capacity should no longer be 0. Ever.
Use int format specifier, not size_t.
Add error checking to some string_t functions.

- index_of now throws an exception for out-of-range values, rather than
  returning npos. npos is a terrible damn idea.
- erase will throw an exception for any offset < 0 or count < 0.
Add error check to string_t::resize.

If len < 0, throws an std::out_of_range exception.

string_t::resize argument also renamed to new_length. Helps reading.
Add argument name to string_t::resize decl.