in.seekg (ios::end);
Чтобы прочесть последний символ, стоять надо не в конце, а на один символ раньше. В вашем случае читать уже нечего.
in.seekg (-1, ios::cur);
Этим вы только отшагнёте обратно на один символ, который только что прочли.
Если файлы невелики, проще будет прочесть его весь прочесть в std::vector, а потом просто скопировать в выходной файл:
std::vector<char> cts;
in.seekg(0, in.end);
cts.resize(in.tellg());
in.seekg(0, in.beg);
in.read(&ctr[0], ctr.size());
std::ostream_iterator<char> out_it(out);
std::copy(cts.rbegin(), cts.rend(), out);