fork download
  1. #include <stdio.h>
  2.  
  3. template <int size, const char (&str)[size], int parsed_value = 0, int remain = size - 1>
  4. struct ParseDecimal {
  5. static constexpr int parse ()
  6. {
  7. return ParseDecimal<size, str, 10 * parsed_value + (str[size - 1 - remain] - '0'), remain - 1>::parse();
  8. }
  9. };
  10.  
  11. template <int size, const char (&str)[size], int parsed_value>
  12. struct ParseDecimal<size, str, parsed_value, 0> {
  13. static constexpr int parse ()
  14. {
  15. return parsed_value;
  16. }
  17. };
  18.  
  19. template <int size>
  20. constexpr int array_size (const char (&str)[size])
  21. {
  22. return size;
  23. }
  24.  
  25. extern constexpr char my_string[] = "1234567";
  26. constexpr int my_value = ParseDecimal<array_size(my_string), my_string>::parse();
  27.  
  28. int main ()
  29. {
  30. printf("%d\n", my_value);
  31. }
  32.  
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
1234567