fork(1) download
  1. #include <type_traits>
  2. #include <typeinfo>
  3. #include <iostream>
  4. template<typename T, typename ... Ts>
  5. struct are_arithmetic{
  6. enum {
  7. value = std::is_arithmetic<T>::value && are_arithmetic<Ts...>::value
  8. };
  9. };
  10.  
  11. template<typename T>
  12. struct are_arithmetic<T>{
  13. enum {
  14. value = std::is_arithmetic<T>::value
  15. };
  16. };
  17.  
  18. template<typename Arg, typename = typename std::enable_if<std::is_arithmetic<Arg>::value>::type>
  19. Arg max(Arg arg){
  20. return arg;
  21. }
  22.  
  23. template<typename Arg, typename Arg1, typename ... Args, typename = typename std::enable_if<are_arithmetic<Arg, Arg1, Args...>::value>::type>
  24. auto max(Arg arg, Arg1 arg1, Args ... args){
  25. auto max_rest = max(arg1, args...);
  26. return arg > max_rest ? arg : max_rest;
  27. }
  28.  
  29. int main(){
  30. auto res = max(1.0, 2, 3.0f, 5, 7l);
  31. std::cout << typeid(res).name() << " " << typeid(7l).name();
  32. }
Success #stdin #stdout 0s 3096KB
stdin
Standard input is empty
stdout
d l