Возвращение константной ссылки на локальную переменную из функции

У меня есть несколько вопросов по возвращению ссылки на локальную переменную из функции:

class A
{
public:
        A(int xx):x(xx)
 {
  printf("A::A()\n");
 }
};

const A& getA1()
{
 A a(5);
 return a;
}

A& getA2()
{
 A a(5);
 return a;
}

A getA3()
{
 A a(5);
 return a;
}

int main()
{ 
     const A& newA1 = getA1(); //1
     A& newA2 = getA2();       //2
     A& newA3 = getA3();       //3
}

Мои вопросы =>

Является ли реализацияgetA1() верный? Я чувствую, что это неверно, так как он возвращает адрес локальной переменной или временный.

Какое из утверждений вmain (1,2,3) приведет к неопределенному поведению?

Вconst A& newA1 = getA1(); гарантирует ли стандарт, что временная привязка константной ссылкой не будет уничтожена, пока ссылка не выйдет из области видимости?

Ответы на вопрос(4)

Ваш ответ на вопрос