fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4.  
  5. template<typename T>
  6. struct MyFirstElement;
  7. template<template<typename...> class T_Container, typename T_Type, typename... Ts>
  8. struct MyFirstElement<T_Container<T_Type,Ts...>>{
  9. using Type = T_Type;
  10. };
  11.  
  12. //unit test
  13. using MustBeInt = typename MyFirstElement<std::vector<int>>::Type;
  14. using MustBeLong = typename MyFirstElement<std::map<long,float>>::Type;
  15.  
  16. static_assert(std::is_same<MustBeInt,int>::value,"");
  17. static_assert(std::is_same<MustBeLong,long>::value,"");
  18.  
  19. //this works too even though its not an STL container
  20. template<typename T, typename U, typename Z>
  21. struct MyCrazyContainer{};
  22.  
  23. static_assert(std::is_same<typename MyFirstElement<MyCrazyContainer<bool,long,float>>::Type,bool>::value,"");
  24.  
  25. int main() {
  26. return 0;
  27. }
Success #stdin #stdout 0s 3336KB
stdin
Standard input is empty
stdout
Standard output is empty