wouldn't it be more in C++11 manner to use move semantics to solve the problem of generating new strings on concatenation?
In the case of concatenation, where the goal is to end up with a contiguous array of the characters from the strings to be joined, no block of memory sufficiently large exists anywhere to be appropriated, so new memory must be allocated.