#include template XXXXXXXXX XXXX::XXXX() { xxxxxx(xxxx, 0, xxxxxx (*xxxx)); } xxxxxxxx xxxxx& xxxxx::xxxxxxxx=(xxx::xxxxxxxxxxx_xxxx xx) { xxxxxx *xxxx = xxxxx(xxx::xxxx(xx)); } xxxxxxxx xxxx xxxxx::xxxx_xxxx(xxxx_x xxxx_xxx, xxxx_x xxxx_xx) xxxxxxxx { xxxx_x xx = xxxx->xxxx(); xxxx_xxx_xxxxxx(xxxx->xxxxxxxx() >= xx + xxxx_xx); xxxx_xxx_xxxxxx(xxxx_xxx <= xx); xx (xxxx_xxx < xx && xxxx_xx) { x* xxxx = xxxx->xxxx(); xxx (xxxx_x xxx = xx + xxxx_xx - 1; xxx >= xxxx_xxx; --xxx) { xx (xxx >= xx) xxx (xxxx[xxx]) x(xxx::xxxx(xxxx[xxx - xxxx_xx])); xxxx xx (xxx >= xxxx_xxx + xxxx_xx) xxxx[xxx] = xxx::xxxx(xxxx[xxx - xxxx_xx]); xxxx xxxx[xxx].~x(); } } } xxxxxxxx xxxx xxxxx::xxxxx_xxxx(xxxx_x xxxx_xxx, xxxx_x xxxx_xx, xxxx_x xx_xxxxxxxxxxx) xxxxxxxx { xx (!xxxx_xx) xxxxxx; xxxx_x xx = xxxx->xxxx(); xxxx_xxx_xxxxxx(xx_xxxxxxxxxxx <= xxxx_xx); xxxx_xxx_xxxxxx(xxxx_xxx <= xx); x* xxxx = xxxx->xxxx(); xxx (xxxx_x xxx = xxxx_xxx; xxx < xx + xxxx_xx; ++xxx) { xx (xxx < xxxx_xxx + xx_xxxxxxxxxxx) { // xx xxx xxxx xxxx xxx xxxxxxxx xx'xx xxxxxxxxxxxx xxxxxxxxxxx. xxxx[xxx] = xxx::xxxx(xxxx[xxx + xxxx_xx]); } xxxx xx (xxx < xxxx_xxx + xxxx_xx) { // xxxx xxxxxxx xxxx'x xxxxxxxxxx xxxxxxxxxxx, xx xxxxxxxxx-xxx // xxxx xxxx xx xxxxxxx. xxx (&xxxx[xxx]) x(xxx::xxxx(xxxx[xxx + xxxx_xx])); } xxxx xx (xxx < xx) { // xxxx xx xxx xxxxxxx xxxxxxxx xxxx[xxx] = xxx::xxxx(xxxx[xxx + xxxx_xx]); } xxxx { // xxxxxxxx xxx xxxx xxx xxx: xxxxxxx xxxx xxxx[xxx].~x(); } } } xxxxxxxx xxxxxxxx xxxxxxxx xxxxx::xxxxxxxx xxxxx::xxxxxxx(xxxxx_xxxxxxxx x, xxxx&&... xxxx) { // xxxx xxx xxxxx: xxxxxxxx xxxxxxxxxxx xxxxx. xxxx_x xxx = xxx::xxxxxxxx(xxxx->xxxxxx(), x); xxxx_x xx = xxxx->xxxx(); // xxxx xxxx xx xxx xxxxx xx xxx xxxxx xxx xxxx xx xxxx xxxx. xxxx->xxxx(1); xxxx->xxxx_xxxx(xxx, 1); // xxxxxxx xxx xxxxxx xxxxxxxxx xxxxxxxxx xxxx xxxxxxx = xxxxx; xxxx xxxxx = xxxxxxxx::xxxxxxxxxx([&]{ xx (!xxxxxxx) xxxx->xxxxx_xxxx(xxx, 1, 0); }); xxx (&xxxx->xxxx()[xxx])(xxx::xxxxxxx(xxxx)...); xxxxxxx = xxxx; xxxx_xxx_xxxxx_xxx_xxxx(&xxxx->xxxxx, &xxxxx::xxxx, xx + 1); }