Можем ли мы вернуть строковый литерал в C

Является ли этот код действительным?

const char* foo() {
  return "Hello World";
}

То есть, верните "Hello World" из функции C.

const char* str = foo();

Будет ли str висящим указателем?

PS: Вышеупомянутая функция абстрагируется от некоторого реального кода. Я вижу, что кто-то пишет код, который напрямую возвращает строковый литерал.