Protocol Buffers use the same varint format as TCompactProtocol (not, as I had previously believed, TDenseProtocol, which uses the MIDI VLQ format). They have a much smarter C++ decoder than ours (and probably a better encoder also). Protocol Buffers is (are?) three-clause BSD licensed, which means that we should be able to cough borrow cough their implementation and use it for our C++ TCompactProtocol implementation.
We might even be able to do the same for Java and Python.