1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | template<unsigned Cur, unsigned Goal> struct adder{ static unsigned const sub_goal = (Cur + Goal) / 2; static unsigned const tmp = adder<Cur, sub_goal>::value; static unsigned const value = tmp + adder<sub_goal+1, Goal>::value; }; template<unsigned Goal> struct adder<Goal, Goal>{ static unsigned const value = Goal; }; template<unsigned Start> struct sum_from{ template<unsigned Goal> struct to{ template<unsigned N> struct equals; typedef equals<adder<Start, Goal>::value> result; }; }; int main(){ sum_from<1>::to<1000>::result(); } |
dGVtcGxhdGU8dW5zaWduZWQgQ3VyLCB1bnNpZ25lZCBHb2FsPgpzdHJ1Y3QgYWRkZXJ7CiAgc3RhdGljIHVuc2lnbmVkIGNvbnN0IHN1Yl9nb2FsID0gKEN1ciArIEdvYWwpIC8gMjsKICBzdGF0aWMgdW5zaWduZWQgY29uc3QgdG1wID0gYWRkZXI8Q3VyLCBzdWJfZ29hbD46OnZhbHVlOwogIHN0YXRpYyB1bnNpZ25lZCBjb25zdCB2YWx1ZSA9IHRtcCArIGFkZGVyPHN1Yl9nb2FsKzEsIEdvYWw+Ojp2YWx1ZTsKfTsKCnRlbXBsYXRlPHVuc2lnbmVkIEdvYWw+CnN0cnVjdCBhZGRlcjxHb2FsLCBHb2FsPnsKICBzdGF0aWMgdW5zaWduZWQgY29uc3QgdmFsdWUgPSBHb2FsOwp9OwoKdGVtcGxhdGU8dW5zaWduZWQgU3RhcnQ+CnN0cnVjdCBzdW1fZnJvbXsKICB0ZW1wbGF0ZTx1bnNpZ25lZCBHb2FsPgogIHN0cnVjdCB0b3sKICAgIHRlbXBsYXRlPHVuc2lnbmVkIE4+CiAgICBzdHJ1Y3QgZXF1YWxzOwoKICAgIHR5cGVkZWYgZXF1YWxzPGFkZGVyPFN0YXJ0LCBHb2FsPjo6dmFsdWU+IHJlc3VsdDsKICB9Owp9OwoKaW50IG1haW4oKXsKICBzdW1fZnJvbTwxPjo6dG88MTAwMD46OnJlc3VsdCgpOwp9
prog.cpp: In function ‘int main()’: prog.cpp:25: error: invalid use of incomplete type ‘struct sum_from<1u>::to<1000u>::equals<500500u>’ prog.cpp:18: error: declaration of ‘struct sum_from<1u>::to<1000u>::equals<500500u>’
-
result: Compilation error (maybe you wish to see an example for C++ 4.7.2)


