1. Could you provide an example, where you would need to add `static`? I am talking about returning constant reference to string (`const string &`) instead of `const char *`. (it is even the same number of tokens :)). 

2. `std::string` is always making a deep copy not a shallow one (check this http://stackoverflow.com/questions/8467049/c-stl-string-copy-constructor-always-a-deep-copy). But indeed the compiler can perform RVO.  Anyway if we use `const string &` -- then we don't need to rely on RVO as the copy would be made in the same cases as when using `const char *`.