There's nothing wrong with the precedence. current starts with '\0'. the post-increment pushes it to the container then sets it to '\0' again and returns A COPY OF THE OLD ITERATOR, which has its current set to the given char by * (and the default =). The "real" current is still '\0', so you get a bunch of zeroes in the container.

And it's not really right for the increment operator to modify the container. I think the ++'s and * should be no-ops and you need to implement operator=, just like the back_inserter.

A back_insert_iterator is a kind of output iterator, which is what you are trying to implement. They are kind of strange: C++ named requirements: LegacyOutputIterator - cppreference.com