It seems your std::bind
implementation does not support perfect forwarding via placeholders, but since you have C++11 and std::bind
is ugly anyways, use lambdas:
std::function<void(std::string&&)> pF
= [&c](std::string&& str)
{
c.F(std::move(str));
};
Edit:
Note: Although accepted, this answer is not a solution to the problem at hand, because it is not std::bind
but MSVC10's std::function
implementation that is flawed. However, the suggestion has led to a workaround and therefore was accepted by PorkyBrain.