fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. char member_data[16];
  5.  
  6. template<typename T>
  7. using member_func = void (T::*)();
  8.  
  9. template<typename T>
  10. void set(member_func<T> member) {
  11. reinterpret_cast<member_func<T>&>(member_data) = member;
  12. }
  13.  
  14. template<typename T>
  15. member_func<T> get() {
  16. return reinterpret_cast<member_func<T>&>(member_data);
  17. }
  18.  
  19. struct A {
  20. void foo() {}
  21. void bar() {}
  22. };
  23.  
  24. int main() {
  25. set(&A::foo);
  26. member_func<A> g = get<A>();
  27.  
  28. cout << (g == &A::foo) << endl;
  29. cout << (g == &A::bar) << endl;
  30. }
Success #stdin #stdout 0s 2896KB
stdin
Standard input is empty
stdout
1
0