Is this an okay way to reverse a string without any temporary variables?

Is this an okay way to reverse a string without any temporary variables?

I was wondering whether the C++ purists could give me some input. Critique
my approach and my adherence to proper coding form. Let me know about any
red flags that tell you I'm an amateur.
#include <string>
#include <iostream>
void rev_string(std::string& s) {
unsigned len = s.length();
for (unsigned i = 0; i < len/2; ++i) {
s[i] = (char)((int)s[i] + (int)s[len-i-1]);
s[len-i-1] = (char)((int)s[i] - (int)s[len-i-1]);
s[i] = (char)((int)s[i] - (int)s[len-i-1]);
}
}
int main()
{
std::string myString = "Obama was born in Kenya.";
rev_string(myString);
std::cout << myString;
return 0;
}