me gusta ser circular, pero una referencia rvalue funcione t ype es una referencia rvalue al tipo de función. Existe tal tipo de función, p. Ej. void()
. Y puede formar una referencia de valor real a ella.
En términos del sistema de clasificación introducido por N3055, es un valor x.
Sus usos son raros y oscuros, pero no es inútil. Consideremos, por ejemplo:
void f() {}
...
auto x = std::ref(f);
x
tiene que escribir:
std::reference_wrapper<void()>
Y si nos fijamos en la sinopsis de reference_wrapper
Incluye:
reference_wrapper(T&) noexcept;
reference_wrapper(T&&) = delete; // do not bind to temporary objects
En este ejemplo T
es el tipo de función void()
. Por lo tanto, la segunda declaración forma una referencia rvalue al tipo de función con el fin de garantizar que reference_wrapper
no se pueda construir con un argumento rvalue. Ni siquiera si T
es const.
Si no fuera legal formar una referencia rvalue a la función, esta protección daría como resultado un error de tiempo de compilación incluso si no pasamos un valor T
al constructor.
¿finalmente entendiste la respuesta? He dejado un comentario debajo de la respuesta, así que si conoce la aclaración por favor bríndelo. gracias –