#include <iostream>
using namespace std;
template <int a>
class foo
{
public:
int n;
constexpr foo() : n(a) { }
};
template <int a>
class foo2
{
public:
static constexpr int n = a;
};
template <size_t N>
constexpr int simple_checksum(const char (&str)[N], int index = 0)
{
return (str[index] ? str[index] + simple_checksum(str, index+1) : 0);
}
int main() {
foo<simple_checksum("ala ma kota")> a;
cout << "checksum: " << a.n << endl;
cout << "checksum 2: " << foo2<simple_checksum("ala ma kota")>::n << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGludCBhPgpjbGFzcyBmb28gCnsKcHVibGljOgoJaW50IG47Cgljb25zdGV4cHIgZm9vKCkgOiBuKGEpIHsgfQp9OwoKdGVtcGxhdGUgPGludCBhPgpjbGFzcyBmb28yCnsKcHVibGljOgoJc3RhdGljIGNvbnN0ZXhwciBpbnQgbiA9IGE7CQp9OwoKdGVtcGxhdGUgPHNpemVfdCBOPgpjb25zdGV4cHIgaW50IHNpbXBsZV9jaGVja3N1bShjb25zdCBjaGFyICgmc3RyKVtOXSwgaW50IGluZGV4ID0gMCkKewoJcmV0dXJuIChzdHJbaW5kZXhdID8gc3RyW2luZGV4XSArIHNpbXBsZV9jaGVja3N1bShzdHIsIGluZGV4KzEpIDogMCk7Cn0KCmludCBtYWluKCkgewoJZm9vPHNpbXBsZV9jaGVja3N1bSgiYWxhIG1hIGtvdGEiKT4gYTsKCWNvdXQgPDwgImNoZWNrc3VtOiAiIDw8IGEubiA8PCBlbmRsOwoJY291dCA8PCAiY2hlY2tzdW0gMjogIiA8PCBmb28yPHNpbXBsZV9jaGVja3N1bSgiYWxhIG1hIGtvdGEiKT46Om4gPDwgZW5kbDsKCXJldHVybiAwOwp9