tipos - todas las funciones de c++
¿Por qué se enlaza esta referencia de valor a un valor de l? (1)
Según [dcl.spec.auto]/5 , el tipo de devolución se deduce como si el operando de la declaración de return
fuera el operando de decltype
. Y [dcl.type.simple]/(4.2) establece claramente que, como el operando no está entre paréntesis, el tipo de entidad es el tipo decltype
por decltype
, es decir, int&&
. Y de hecho, r
es un lvalue ( [expr.prim.id.unqual] ).
Afortunadamente, esto ha sido descubierto y archivado como error 64892 hace dos años. (Me pregunto por qué nadie pudo encontrar el tiempo para arreglar esto?)
No entiendo por qué el siguiente código se compila en GCC 8.0:
decltype(auto) foo(int&& r) {
return r;
}
En foo
, el tipo de declaración de r
es int&&
, por lo que el tipo de devolución de foo
también es int&&
. Pero r
sí es un lvalue, y un lvalue no puede vincularse a una referencia rvalue.
¿Me estoy perdiendo de algo?