LINUX.ORG.RU

История изменений

Исправление 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, :