История изменений
Исправление const86, (текущая версия) :
template<typename T, typename R, typename... A>
struct S {
typedef R (T::*type)(A...);
};
template<typename T, typename R, typename...A>
S<T, R, A...> make_s(T &, R (*)(A...)) {
return S<T, R, A...>();
}
template<typename T, typename M>
struct U {
T &t;
M &m;
typedef typename decltype(make_s(t, m))::type type;
};
#include <iostream>
using namespace std;
struct Z {
void f(int x) {
cout << x << endl;
}
};
int main() {
U<Z, void(int)>::type m = &Z::f;
(Z().*m)(4);
}
Исходная версия const86, :