As for the standard, you cannot take a pointer to any standard non-static member, because it is allowed to add hidden overloads, default template parameters, SFINAE in the return type to the library implementation, etc.
In other words, & std::string::clearjust not supported.
Clang . () , , . : & std::string::clear , . , , , std::string libc++.so. std::basic_string .
. []( std::string & o ) { o.clear(); } mem_fn. , sizeof . , mem_fn, .