Run Length Encoding (RLE) and Move To Front (MTF) in C++
Looks quite nice, but let's get down to ripping it apart.

First your runlength-encoding:


Try to use the same type for size-variables / indices throughout:
std::basic_string&lt;...&gt; uses std::size_t.
That way you would also heal the one sign-mismatch.
Your comment about the encoded form // encode (aaaaeecd -&gt; 4a2e1c1d) is wrong.
You probably meant: // encode (aaaaeecd -&gt; \x04a\x02e\x01c\x01d)
You are wasting \x00 and thus the chance to encode runs of length 256.
(Yes, the comment // run_count is between 0 and 255 (unsigned char) is wrong.)
You are missing the header &lt;algorithm&gt;.


Next your Move-To-Front:


I suggest you move from std::list to std::array.
A list is a far too heavy data-structure, jumping every-which-way in memory kills your performance quite easily.
The std::deque is a bit better, but using a std::array would probably still handily beat it due to simplicity.