Por que os compiladores emitem um aviso sobre o retorno de uma referência a uma variável de pilha local se esse comportamento é indefinid

O padrão C ++ declara que o retorno de referência a uma variável local (na pilha) é um comportamento indefinido; então, por que muitos (se não todos) dos compiladores atuais dá um aviso para fazer isso?

struct A{
};

A& foo()
{
    A a;
    return a; //gcc and VS2008 both give this a warning, but not a compiler error
}

Não seria melhor se os compiladores derem um erro em vez de avisar para este códig

Existem grandes vantagens em permitir que esse código seja compilado apenas com um avis

Observe que não se trata de umconst referência que pode prolongar o tempo de vida do temporário para o tempo de vida da própria referênci

questionAnswers(7)

yourAnswerToTheQuestion