fork download
  1. #include <iostream>
  2. #include <functional>
  3. #include <memory>
  4.  
  5. template <typename T, typename V>
  6. int mao(T&& t, V&& v, decltype( (t.*v)(0), (int)0 ) = 0)
  7. {//オブジェクトとメンバーポインタの組み合わせ
  8. return 0;
  9. }
  10. template <typename T, typename V>
  11. int mao(T&& t, V&& v, decltype( (*t.*v)(0), (char)0 ) = 0)
  12. {//ポインタ(生ポ/スマポ)とメンバーポインタの組み合わせ
  13. return 1;
  14. }
  15. int mao(...)
  16. {//それ以外
  17. return -1;
  18. }
  19.  
  20. struct test {
  21. int a;
  22. test(int b) : a(b) { }
  23. int get(int b) const { return a+b; }
  24. };
  25.  
  26. int main()
  27. {
  28. test a(7);
  29. std::unique_ptr<test> p(new test(8));
  30. std::cout << mao(a, &test::get) << std::endl;
  31. std::cout << mao(&a, &test::get) << std::endl;
  32. std::cout << mao(p, &test::get) << std::endl;
  33. return 0;
  34. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
0
1
1