fork download
  1. #include <iostream>
  2. #include <utility>
  3. #include <type_traits>
  4.  
  5.  
  6. template<typename T>
  7. T Min(T&& t)
  8. {
  9. return std::forward<T>(t);
  10. }
  11.  
  12. template<typename T0, typename T1, typename... Tv>
  13. std::common_type_t<T0, T1, Tv...> Min(T0&& first, T1&& second, Tv&&... args)
  14. {
  15. return first < second ? Min(first, std::forward<Tv>(args)...) : Min(second, std::forward<Tv>(args)...);
  16. }
  17.  
  18. int main()
  19. {
  20. int x = 7;
  21. int y = 3;
  22. int& z0 = x;
  23. int& z1 = y;
  24. ((z0<z1)?z0:z1)=2;
  25. // vmin(z0, z1) = 2; -- want this to work, return an lvalue, but cannot with common_type
  26. std::cout << x << "," << y << "\n";
  27. std::cout << Min(3, 2, 0.9, 2, 5) << std::endl;
  28.  
  29. std::cout << Min(3., 1.2, 1.3, 2., 5.2) << std::endl;
  30.  
  31. return 0;
  32. }
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
7,2
0.9
1.2