http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57283
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Lin Yi-Li from comment #2) > Sorry I missed that 'pm is a pointer to member function...'. > > I know that C++11 has lambda, but using std::mem_fn is sometimes much clear. You can still use std::mem_fn, the problem is with std::not1, which only works with the C++98 function object protocol. > But according to standard, value from std::mem_fn for variable will not be > able to work with std::not1. Even if the usage is similiar to the one for > member function takes no argument. It's similar but not the same, for a member function the result_type is the return type and the argument_type is dictated by the cv-qualifiers of the member function, i.e. for a const member function the argument_type is 'const T*', but for a member variable the result_type depends on whether you call it with a const or non-const argument. Should mem_fn(&cls::value) have result_type=int& and argument_type=cls* or result_type=const int& and argument_type=const cls*? The result of mem_fn(&cls::value) is polymorphic. > So is it possible to be an enhancement? It might be possible to generalize std::unary_negate, but that's for the standard committee not GCC's bugzilla.