#include <stdio.h>
template <int size, const char (&str)[size], int parsed_value = 0, int remain = size - 1>
struct ParseDecimal {
static constexpr int parse ()
{
return ParseDecimal<size, str, 10 * parsed_value + (str[size - 1 - remain] - '0'), remain - 1>::parse();
}
};
template <int size, const char (&str)[size], int parsed_value>
struct ParseDecimal<size, str, parsed_value, 0> {
static constexpr int parse ()
{
return parsed_value;
}
};
template <int size>
constexpr int array_size (const char (&str)[size])
{
return size;
}
extern constexpr char my_string[] = "1234567";
constexpr int my_value = ParseDecimal<array_size(my_string), my_string>::parse();
int main ()
{
printf("%d\n", my_value);
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0ZW1wbGF0ZSA8aW50IHNpemUsIGNvbnN0IGNoYXIgKCZzdHIpW3NpemVdLCBpbnQgcGFyc2VkX3ZhbHVlID0gMCwgaW50IHJlbWFpbiA9IHNpemUgLSAxPgpzdHJ1Y3QgUGFyc2VEZWNpbWFsIHsKICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhcnNlICgpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcnNlRGVjaW1hbDxzaXplLCBzdHIsIDEwICogcGFyc2VkX3ZhbHVlICsgKHN0cltzaXplIC0gMSAtIHJlbWFpbl0gLSAnMCcpLCByZW1haW4gLSAxPjo6cGFyc2UoKTsKICAgIH0KfTsKCnRlbXBsYXRlIDxpbnQgc2l6ZSwgY29uc3QgY2hhciAoJnN0cilbc2l6ZV0sIGludCBwYXJzZWRfdmFsdWU+CnN0cnVjdCBQYXJzZURlY2ltYWw8c2l6ZSwgc3RyLCBwYXJzZWRfdmFsdWUsIDA+IHsKICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhcnNlICgpCiAgICB7CiAgICAgICAgcmV0dXJuIHBhcnNlZF92YWx1ZTsKICAgIH0KfTsKCnRlbXBsYXRlIDxpbnQgc2l6ZT4KY29uc3RleHByIGludCBhcnJheV9zaXplIChjb25zdCBjaGFyICgmc3RyKVtzaXplXSkKewogICAgcmV0dXJuIHNpemU7Cn0KCmV4dGVybiBjb25zdGV4cHIgY2hhciBteV9zdHJpbmdbXSA9ICIxMjM0NTY3IjsKY29uc3RleHByIGludCBteV92YWx1ZSA9IFBhcnNlRGVjaW1hbDxhcnJheV9zaXplKG15X3N0cmluZyksIG15X3N0cmluZz46OnBhcnNlKCk7CgppbnQgbWFpbiAoKQp7CiAgICBwcmludGYoIiVkXG4iLCBteV92YWx1ZSk7Cn0K