Sobre a ligação de uma referência const a um subobjeto de um temporário

Com código como

#include <iostream>

struct P {
    int x;
    P(int x) : x(x) {}
    ~P() { std::cout << "~P()\n"; }
};

int main() {
    auto const& x = P{10}.x;
    std::cout << "extract\n";
}

Impressões GCC~P() extract, indicando que o tempo de vida do temporário não é estendido pela referência.

Por outro lado, o Clang (IMO corretamente) estende a vida útil do temporário para o tempo de vida da referênciax e o destruidor será chamadodepois de a saída emmain.

Observe que o GCC mostra repentinamente o comportamento de Clang se nós, em vez deint, use algum tipo de classe (por exemplo,string)

Isso é um bug no GCC ou algo permitido pelo padrão?

questionAnswers(3)

yourAnswerToTheQuestion