fork download
  1. #include <stdio.h>
  2.  
  3. #include <array>
  4.  
  5. // decimal_repr_size() computes the number of digits in the decimal representation of the given value
  6.  
  7. constexpr int decimal_repr_size (int value)
  8. {
  9. return (value == 0) ? 0 : (1 + decimal_repr_size(value / 10));
  10. }
  11.  
  12. // GenerateDecimal::gen is a recursive function for generating the decimal representation
  13.  
  14. template <int value, char... generated>
  15. struct GenerateDecimal {
  16. static constexpr std::array<char, decimal_repr_size(value) + sizeof...(generated) + 1> gen ()
  17. {
  18. return GenerateDecimal<value / 10, '0' + (value % 10), generated...>::gen();
  19. }
  20. };
  21.  
  22. template <char... generated>
  23. struct GenerateDecimal<0, generated...> {
  24. static constexpr std::array<char, sizeof...(generated) + 1> gen ()
  25. {
  26. return std::array<char, sizeof...(generated) + 1>{{generated..., '\0'}};
  27. }
  28. };
  29.  
  30. // generate_decimal generates the decimal representation of the given value and adds a null byte
  31.  
  32. static constexpr auto decimal_array = GenerateDecimal<1234567>::gen();
  33.  
  34. int main ()
  35. {
  36. printf("%s\n", decimal_array.data());
  37. }
  38.  
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
1234567