fork download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4. struct A{
  5. char* ka;
  6. };
  7.  
  8. struct B{
  9. char* baa;
  10. };
  11.  
  12. template<typename T0, typename T1>
  13. struct my_pair{
  14. my_pair(T0 el0, T1 el1): el0(el0), el1(el1) {}
  15. T0 el0;
  16. T1 el1; // may be next pair
  17. };
  18.  
  19. template<int i, int current = 0, typename T>
  20. auto constexpr get_my(const T& t, typename std::enable_if< i==current >::type* = 0) -> decltype(t.el0)
  21. {
  22. return t.el0;
  23. }
  24.  
  25. template<int i, int current, typename T>
  26. auto constexpr get_my(const T& t, typename std::enable_if< i!=current >::type* = 0) ->
  27. decltype( get_my<i, current+1>(t.el1) )
  28. {
  29. return get_my<i, current+1>(t.el1);
  30. }
  31.  
  32. template<int i, typename T>
  33. auto constexpr get_my(const T& t, typename std::enable_if< i!=0 >::type* = 0) ->
  34. decltype( get_my<i, 1>(t.el1) )
  35. {
  36. return get_my<i, 1>(t.el1);
  37. }
  38.  
  39. int main()
  40. {
  41. my_pair<int, my_pair<B,double>> p1(12.789, {B(), 3.14} );
  42.  
  43. auto el1 = get_my<1>(p1);
  44. int t =1;
  45. }
Success #stdin #stdout 0s 3336KB
stdin
Standard input is empty
stdout
Standard output is empty