Auto and Decltype
  1. #include <iostream>
  2. #include <vector>
  3. #include <typeinfo>
  4.  
  5. //std::vector<int> getContainer()
  6. auto getContainer() -> std::vector<int>//C++11, trailing return type syntax
  7. //auto getContainer()//C++14
  8. {
  9. std::vector<int> c = {1, 2, 3, 4};
  10.  
  11. return c;
  12. }
  13.  
  14. int main(int argc, char *argv[])
  15. {
  16. auto i = 10;
  17. std::cout<<typeid(i).name()<<std::endl;
  18.  
  19. auto d = 3.14;
  20. std::cout<<typeid(d).name()<<std::endl;
  21.  
  22. auto c = getContainer();
  23. std::cout<<typeid(c).name()<<std::endl;
  24. for(int i = 0; i < c.size(); i++)
  25. std::cout<<c[i]<<" ";
  26. std::cout<<std::endl;
  27.  
  28. return 0;
  29. }
Template
  1. //g++ main.cpp -std=c++14
  2. #include <iostream>
  3. #include <initializer_list>
  4. #include <typeinfo>
  5.  
  6. template <class T, class T2>
  7. auto getProduct(T a, T2 b) -> decltype(a*b)//C++11, trailing return type syntax
  8. auto getProduct(T a, T2 b)//C++14
  9. {
  10. auto p = a*b;
  11. std::cout<<"Type: "<<typeid(p).name()<<std::endl;
  12.  
  13. return p;
  14. }
  15.  
  16. int main(int argc, char *argv[])
  17. {
  18. int a = 1;
  19. double b = 10.0;
  20.  
  21. std::cout<<getProduct(1, 4)<<std::endl;
  22.  
  23. return 0;
  24. }
decltype
  1. #include <iostream>
  2. #include <typeinfo>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6. int a = 10;
  7. decltype(a) y;
  8.  
  9. std::cout<<typeid(y).name()<<std::endl;
  10.  
  11. return 0;
  12. }
Reference