Zamieszanie w odniesieniu do celu / zachowania -Waggregate-return?

Patrząc naOpcje ostrzegawcze GCC, Przeszedłem przez-Waggregate-return.

-Waggregate-return
Ostrzegaj, jeśli jakiekolwiek funkcje zwracające struktury lub związki są zdefiniowane lub wywołane. (W językach, w których możesz zwrócić tablicę, wywołuje to również ostrzeżenie.)

mały przykład, który wywołuje ostrzeżenie:

class foo{};
foo f(void){return foo{};}
int main(){}

$ g ++ -std = c ++ 0x -Waggregate-return -o main main.cpp
main.cpp: W funkcji „foo f ()”:
main.cpp: 2: 5: warning: funkcja zwraca agregat [-Waggregate-return]

kolejny mały przykład, który nie wywołuje ostrzeżenia:

#include <string>
std::string f(void){return "test";}
int main(){}

Jakie korzyści uzyskuje się dzięki użyciu opcji -Waggregate-return?
Dlaczego ktoś chciałby być o tym ostrzegany?
Ponadto, czy std :: string nie jest klasą - dlaczego nie ostrzegłem o „zwróconym agregacie” w drugim przykładzie?

questionAnswers(2)

yourAnswerToTheQuestion