Pourquoi la définition de std::function<>::operator() dans le standard C++ est :
R operator()(ArgTypes...) const;
et non
R operator()(ArgTypes&&...) const;
?
On pourrait penser que pour faire suivre correctement les paramètres, il faut utiliser le && et ensuite le std::forward<ArgTypes>...
dans le corps de la fonction lors du transfert de l'appel ?
J'ai partiellement réimplémenté std::function pour tester cela et j'ai découvert que si j'utilise le &&, j'obtiens "cannot bind 'xxx' lvalue to 'xxx&&'" de g++ lorsque j'essaie plus tard de passer des paramètres par valeur à operator(). Je pensais avoir suffisamment bien saisi les concepts de rvalue/forwarding, mais je n'arrive toujours pas à comprendre ce point. Qu'est-ce qui m'échappe ?