Zwracanie tymczasowego obiektu i wiązanie do stałego odniesienia [duplikat]

Możliwy duplikat:
Czy stałe odniesienie przedłuża życie tymczasowego?

Mój kompilator nie narzeka na przypisanie tymczasowego do stałego odniesienia:

string foo() {
  return string("123");
};

int main() {
  const string& val = foo();
  printf("%s\n", val.c_str());
  return 0;
}

Czemu? Myślałem, że ta struna wróciłafoo jest tymczasowy i val może wskazać obiekt, który zakończył się czas życia. Czy standard C ++ na to pozwala i przedłuża żywotność zwracanego obiektu?