If it's a string, I should be able to treat it like a string. Does cout << string_that_is_not_a_string make sense? Does it make sense to be able to use substr on a container of binary data?
I dont think one should use std::string for byte-data-storage. The method provide aren't design to deal with byte-data and you will risk yourself since any changes (or "optimization") on std::string will break your code.
Relevant. Because compiler optimization does seem to break my program.