fork(1) download
  1. #include <typeinfo>
  2. #include <iostream>
  3.  
  4. template <typename... Elements>
  5. struct type_list
  6. {
  7. };
  8.  
  9. template <typename TypeList>
  10. struct type_list_first_element
  11. {
  12. };
  13.  
  14. template <typename FirstElement, typename... OtherElements>
  15. struct type_list_first_element<type_list<FirstElement, OtherElements...>>
  16. {
  17. typedef FirstElement type;
  18. };
  19.  
  20. template <typename TypeList>
  21. struct type_list_last_element;
  22.  
  23. template <typename FirstElement, typename... OtherElements>
  24. struct type_list_last_element<type_list<FirstElement, OtherElements...>>
  25. {
  26. typedef typename type_list_last_element<type_list<OtherElements...>>::type type;
  27. };
  28. template <typename LastElement>
  29. struct type_list_last_element<type_list<LastElement>>
  30. {
  31. typedef LastElement type;
  32. };
  33.  
  34. int main()
  35. {
  36. typedef type_list<int, float, char> list;
  37. typedef type_list_first_element<list>::type first;
  38. std::cout << typeid(first).name() << std::endl;
  39. typedef type_list_last_element<list>::type last;
  40. std::cout << typeid(last).name() << std::endl;
  41. return 0;
  42. }
Success #stdin #stdout 0s 2928KB
stdin
Standard input is empty
stdout
i
c