C++11 std ::функция и совершенная переадресация

Почему определение std ::function<> ::operator ()в стандарте C++:

R operator()(ArgTypes...) const;

а не

R operator()(ArgTypes&&...) const;

?

Можно подумать, что для правильной пересылки параметров нам нужен &&, а затем использовать std::forward<ArgTypes>...в теле функции при переадресации вызова?

Я частично переопределил функцию std ::, чтобы проверить это, и обнаружил, что если я использую &&, я получаю «не могу связать 'xxx' lvalue с 'xxx&&'» из g++, когда позже пытаюсь передать параметры по значению оператору (). Я думал, что достаточно разобрался с концепциями rvalue/forwarding, но все же не могу понять этот момент. Что мне не хватает?

13
задан Xeo 21 June 2012 в 10:01
поделиться