C ++ 11 std :: función y reenvío perfecto
Por qué la definición de std :: function <> :: operator () en el estándar de C ++ es:
R operator()(ArgTypes...) const;
y no
R operator()(ArgTypes&&...) const;
?
Uno podría pensar que para enviar correctamente los parámetros, necesitamos el && y luego usarstd::forward<ArgTypes>...
en el cuerpo de la función al reenviar la llamada?
Reimplementé parcialmente la función std :: para probar esto y descubrí que si uso &&, obtengo "no puedo vincular el valor de 'xxx' a 'xxx &&'" de g ++ cuando intento más adelante pasar parámetros por valor al operador () . Pensé que entendía lo suficiente sobre los conceptos de rvalue / forwarding, pero todavía no puedo asimilar este punto. ¿Qué me estoy perdiendo?