#include <iostream>
using namespace std;

char member_data[16];

template<typename T>
using member_func = void (T::*)();

template<typename T>
void set(member_func<T> member) {
    reinterpret_cast<member_func<T>&>(member_data) = member;
}

template<typename T>
member_func<T> get() {
    return reinterpret_cast<member_func<T>&>(member_data);
}

struct A {
    void foo() {}
    void bar() {}
};

int main() {    
    set(&A::foo);
    member_func<A> g = get<A>();
    
    cout << (g == &A::foo) << endl;
    cout << (g == &A::bar) << endl;
}