ualificações CV de pré-valores (revisitado

Este é um acompanhamento do meuprevious question, onde o consenso aparente foi que a mudança no tratamento das qualificações de CV de pré-valores era apenas uma mudança bastante pequena e inconseqüente, destinada a resolver algumas inconsistências (por exemplo, funções retornando pré-valores e declaradas com tipos de retorno qualificados para CV

No entanto, vejo outro lugar no padrão que parece depender de pré-valores com tipos qualificados para cv: inicialização deconst referências com pré-valores através de conversão de materialização temporária. A redação relevante pode ser encontrada em vários pontos em 9.3.3 / 5

[...] Se o inicializador convertido for um pré-valor, seu tipo T4 será ajustado para o tipo “cv1 T4” ([conv.qual]) e a conversão temporária de materialização ([conv.rval]) será aplicada [... ]

[...] Caso contrário, a expressão do inicializador é implicitamente convertida em um valor inicial do tipo "cv1 T1". A conversão temporária de materialização é aplicada e a referência é vinculada ao resultad

A intenção é obviamente garantir que, quando chegarmos ao conversão de materialização temporária

.3.4 Conversão temporária de materialização
1 Um pré-valor do tipo T pode ser convertido em um x-valor do tipo T. Essa conversão inicializa um objeto temporário ([class.temporary]) do tipo T a partir do pré-valor, avaliando o pré-valor com o objeto temporário como objeto de resultado e produz um xvalue indicando o objeto temporário. [...]

o tipoT que recebe como entrada inclui as qualificações de cv exigidas.

Mas como essa qualificação cv sobrevive à 7.2.2 / 2 no caso de não valor de classe sem matriz?

7.2.2 Tipo
2 Se um pré-valor tiver inicialmente o tipo “cv T”, em que T é um tipo sem classe e sem matriz, sem cv, o tipo da expressão será ajustado para T antes de qualquer análise posterio

Or faz isso?

Por exemplo. que tipo de temporário temos neste exemplo

const int &r = 42;

O temporário éconst ou não? Nós podemos faze

const_cast<int &>(r) = 101; // Undefined or not?

sem desencadear um comportamento indefinido? Se não me engano, a intenção original era obter umconst int temporário nesses casos. Ainda é verdade? (Para tipos de turma, a resposta é clara - obtemos umconstemporário.)

questionAnswers(0)

yourAnswerToTheQuestion