#include <iostream>
template<std::uintmax_t, char...>
struct parse_impl;
template<std::uintmax_t Rest>
struct parse_impl<Rest>
{
static constexpr std::uintmax_t value = Rest / 10;
};
template<std::uintmax_t Rest, char Head, char... Tail>
struct parse_impl<Rest, Head, Tail...>
{
static constexpr std::uintmax_t value = parse_impl<(Rest + (Head - '0')) * 10, Tail...>::value;
};
template<char... Number>
struct parse
{
static constexpr std::uintmax_t value = parse_impl<0, Number...>::value;
};
int main()
{
std::cout << parse<'1', '2', '3'>::value << '\n';
std::cout << parse<'4', '7', '9', '2', '5'>::value;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8c3RkOjp1aW50bWF4X3QsIGNoYXIuLi4+CnN0cnVjdCBwYXJzZV9pbXBsOwoKdGVtcGxhdGU8c3RkOjp1aW50bWF4X3QgUmVzdD4Kc3RydWN0IHBhcnNlX2ltcGw8UmVzdD4KewogICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OnVpbnRtYXhfdCB2YWx1ZSA9IFJlc3QgLyAxMDsKfTsKCnRlbXBsYXRlPHN0ZDo6dWludG1heF90IFJlc3QsIGNoYXIgSGVhZCwgY2hhci4uLiBUYWlsPgpzdHJ1Y3QgcGFyc2VfaW1wbDxSZXN0LCBIZWFkLCBUYWlsLi4uPgp7CiAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6dWludG1heF90IHZhbHVlID0gcGFyc2VfaW1wbDwoUmVzdCArIChIZWFkIC0gJzAnKSkgKiAxMCwgVGFpbC4uLj46OnZhbHVlOwp9OwoKdGVtcGxhdGU8Y2hhci4uLiBOdW1iZXI+CnN0cnVjdCBwYXJzZQp7CiAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6dWludG1heF90IHZhbHVlID0gcGFyc2VfaW1wbDwwLCBOdW1iZXIuLi4+Ojp2YWx1ZTsKfTsKCmludCBtYWluKCkgCnsKICAgIHN0ZDo6Y291dCA8PCBwYXJzZTwnMScsICcyJywgJzMnPjo6dmFsdWUgPDwgJ1xuJzsKICAgIHN0ZDo6Y291dCA8PCBwYXJzZTwnNCcsICc3JywgJzknLCAnMicsICc1Jz46OnZhbHVlOwoJcmV0dXJuIDA7Cn0K