Tento entender os tipos de expressão de C ++ e, quanto mais leio, mais confuso fiquei, pois acho o esboço do C ++ muito difícil de digerir e, portanto, prefiro outros recursos, mas eles se contradizem ou não levam em conta que o a redação e a definição entre versões do C ++ mudam bastante.
A seguir, refiro-me aos seguintes rascunhos:
- C ++ 11 [ n3690 ] ( versão final)
- C ++ 17 [ n4659 ] ( versão final)
- C ++ 20 [ n4835 ] (rascunho atual)
C++11
3.10 Valores e valores... Um prvalor (valor "puro") é um valor que não é um valor x. [Exemplo: o resultado da chamada de uma função cujo tipo de retorno não é uma referência é um prvalor. O valor de um literal como 12, 7.3e5 ou true também é um pré-valor. - exemplo final]
C++17
3.10 Valores e valores... Um pré-valor é uma expressão cuja avaliação inicializa um objeto ou um campo de bits ou calcula o valor do operando de um operador, conforme especificado pelo contexto em que ele aparece.
C++20
7.2.1 Categorias de valor *... Um pré-valor é uma expressão cuja avaliação inicializa um objeto ou um campo de bits ou calcula o valor de um operando de um operador, conforme especificado pelo contexto em que aparece, ou uma expressão que tem o tipo cv void.
Eu entenderia as alterações de redação e alguns ajustes serão feitos, mas para mim toda a definição é alterada. Alguém pode me ajudar a entender isso? Por exemplo, por que a sentença foi removida de que um prvalue é um rvalue que não é um xvalue? Ou por que o exemplo útil foi removido?