@camper: Da muss noch ein wenig mehr berücksichtigt werden. Ich habe ein Makro dafür hier vorgegeben. Wenn wir das ein wenig umschreiben, bekommen wir's:
#define REM_CTOR(...) __VA_ARGS__
template <typename T, typename R>
using helper_ = std::conditional_t<std::is_rvalue_reference<R>{}, T&&, T&>;
#define SPEC(var, cv, ref) \
template <typename R, typename C, typename... Args> \
struct get_std_function<R(C::*)(Args... REM_CTOR var) cv ref > \
{using type = std::function<R(helper_<C cv, int ref>, Args... REM_CTOR var)>;};
#define REF(var, cv) SPEC(var, cv,) SPEC(var, cv, &) SPEC(var, cv, &&)
#define CV(var) REF(var,) REF(var, const) \
REF(var, volatile) REF(var, const volatile)
template <typename> struct get_std_function;
CV(()) CV((,...))
Demo.
( make_function reduziert sich dann auf
template <typename T>
auto make_function(T t) { return get_std_function<T>::type(f); }
)
PS: Wo SO schon verlinkt ist: Wer bist du dort? Ich kann es leider nicht erschließen. Ich vermute derjenige der oben die Frage gestellt hat (T.C.), oder hvd.