Sochin +1, раз ты сразу нашел Саттера, то придираться не буду
Создается ссылка на временный объект. Но тем не менее, с кодом все в порядке. Почему так? Потому что в С++ явно специфицировано, что если привязать временный объект к ссылке на const в стеке, то жизнь временного объекта будет продлена. Теперь он будет жить столько, сколько живет константная ссылка на него. В приведенном примере все валидно, время жизни s заканчивается с закрывающей фигурной скобкой.
string f() { return "abc"; }
void g() {
string& s = f();
cout << s << endl;
}
невалидный код, наличие const'а тут важно. Правильный компилятор выдаст ошибку на этапе компиляции.
комменты к статье на русском Герба Саттерастатья Герба Саттера об использовании const (eng)