The problem is that - if you do not write your code as a template or use the C ++ 0x functions, you must specify the type of the expression boost :: bind. But these types usually have very complex names.
The output of the template argument in C ++ 98:
template<class Fun> void main_main(Fun fun) { set<pair<int,long>,Fun> s (fun); … } int main() { main_main(…boost::bind(…)…); }
With auto and decltype in C ++ 0x:
int main() { auto fun = …boost::bind(…)…; set<pair<int,long>,decltype(fun)> s (fun); main_main(boost::bind(…)); }
Regarding the actual binding expression, I think it is something like this:
typedef std::pair<int,long> pil; boost::bind(&pil::second,_1) < boost::bind(&pil::second,_2)
(unverified)
source share