O retorno de uma variável local por valor em C ++ 11/14 pode resultar na construção do valor de retorno por rvalue quando nenhuma cópia / movimentação está envolvida?

Eu sei que na seguinte situação que o compilador está livre para mover-construir o valor de retorno demakeA (mas também é livre para excluir a cópia ou mover completamente):

struct A
{
    A(A&);
    A(A&&);
};

A makeA()
{
    A localA;
    return localA;
}

O que eu quero saber é se o compilador tem permissão para construir um objeto do tipoA de um objeto local do tipoB por referência rvalue, se estiver sendo construído na instrução de retorno. Em outras palavras, no exemplo a seguir, o compilador pode selecionarAdo construtor 4 para o valor de retorno?

struct B { };
struct A {
    A(A&);  // (1)
    A(A&&); // (2)
    A(B&);  // (3)
    A(B&&); // (4)
};

A makeA()
{
    B localB;
    return localB;
}

Eu pergunto isso, porque me parece que a mesma lógica que permite um objeto local do tipoA ser tratado como um rvalue na declaração de retorno também deve permitir que um local de qualquer tipo seja tratado como um rvalue, mas não consigo encontrar exemplos ou perguntas dessa natureza.

questionAnswers(1)

yourAnswerToTheQuestion