Строка, которую вы хотите, это
return (f.*f.do_something)(5);
(Это компилируется - я пробовал)
"*f.do_something
" относится к самому указателю --- "f" указывает нам, где получить значение do_something из Но нам все еще нужно дать объект, который будет указателем this при вызове функции. Вот почему нам нужен префикс "f.
".