Не ответ (извините), но длинный комментарий: если вы хотите совершенную пересылку, вам нужны универсальные ссылки в шаблоне функции / метода
Я имею в виду ... Я предлагаю переписать operator()
следующим образомили что-то подобное (я также добавил идеальную пересылку для T
объекта)
template <typename U, typename ... As>
RET operator()(U && u, As && ... args)
{
(std::forward<U>(u).*MEMBER)(std::forward<As>(args)...);
}
Так что вы можете написать (по крайней мере, на g ++ и clang ++)
A a;
C<&A::f> c;
c(a, 5, 5);