>>834
>最初はnバイト分bufを広げてdata()の後ろに追記しようとしたのですが、返す型がconstなのでボツ。(書き換えると何が起きるかわからんで、と書いてあるし)

std::vector<char>にしてよければ:

std::vector<char> buf;

std::size_t s = buf.size();
buf.resize(s + n);
is.read(&buf[s], n);
buf.resize(s + is.gcount());

とか?