像
bind1st(mem_fun1<void, queue<char>, const char &>(&queue<char>::push), &queIndexes);
这种把bind1st/bind2nd与mem_fun等组合使用编译通不过的解决方法:
std::bind1st and std::bind2nd don't accept functors which take reference arguments, because they themselves form references to these arguments. You can
- use pointers for your function inputs instead of references
- use boost::bind
- accept the performance cost of copying the string
是因为
The issue is a defect in the library specification.
Take a look at this bug report against gcc and the resulting discussion: Bug 37811 - bind1st fails on mem_fun with reference argument
C++03 lacked the facilities to build a perfect bind library. This issue is fixed in C++11 with perfect forwarding and std::bind.