This causes some weird stuff to happen. name and CID get printed as expected, but request gets printed as weird stuff. It looks to be pulling parts of strings from nearby functions and combining that with whatever is stored in name.
operator+, operator-, etc are evaluated left to right. So subterm cid + " data" is evaluated first.
As you're adding a char (an int type) to a pointer (to the C null-terminated string " data"), it ends up as pointer arithmetic. You're moving the pointer (which is originally pointing at the string " data") to point 'cid' chars further on in memory.
You then add this random C string to the std::string name (at least I assume name is a std::string?)
When you use cid+name+" data" instead you're adding a char and a std::string first. std::string knows how to do that, returning a new temporary string which can be added to the C string " data".