{"id":228367,"date":"2014-07-02T12:41:03","date_gmt":"2014-07-02T08:41:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=228367"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=228367","title":{"rendered":"<span class=\"post_title\">\u041a\u0440\u0435\u0441\u0442\u0438\u043a\u0438-\u043d\u043e\u043b\u0438\u043a\u0438: \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u2014 \u044d\u043a\u0441\u0442\u0440\u0435\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u043d\u0433<\/span>"},"content":{"rendered":"<div class=\"content html_format\">\n<blockquote><p>&quot;- \u041f\u043e\u0441\u043b\u0435 \u041c\u044f\u0442\u0435\u0436\u0430 \u0413\u0430\u043b\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0421\u043e\u0434\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u043b\u043e\u0436\u0438\u043b\u043e \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 <b>\u043c\u0435\u0442\u0430\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430<\/b>. \u0418 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u044d\u0442\u0438\u043a\u0438; \u0438\u0445 \u0432\u043b\u0430\u0441\u0442\u0438 \u043e\u043f\u0430\u0441\u0430\u044e\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u043d\u0438\u0438 \u0432\u0435\u043b\u0438\u0447\u0438\u044f&#8230;&quot;<br \/>  (<i>\u0438\u0437 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u0432\u044b\u0434\u0430\u0447\u0438 google<\/i>)<\/p><\/blockquote>\n<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0412\u0430\u043c \u0441\u044b\u0433\u0440\u0430\u0442\u044c \u0432 \u043a\u0440\u0435\u0441\u0442\u0438\u043a\u0438-\u043d\u043e\u043b\u0438\u043a\u0438 \u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c. \u0414\u043b\u044f \u0438\u0433\u0440\u044b \u0437\u043d\u0430\u043d\u0438\u044f c++ \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u044f cmake, python \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 c++ ( \u043f\u043e\u0442\u044f\u043d\u0435\u0442 \u0434\u0430\u0436\u0435 \u0442\u0430\u043a\u043e\u0439 \u0434\u0440\u0435\u0432\u043d\u0438\u0439 \u043a\u0430\u043a gcc-3.3 ). Python \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0445\u043e\u0434\u0430, \u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0412\u0441\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f (\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0445\u043e\u0434, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u0442\u0430\u0446\u0438\u0438 \u043d\u0438\u0447\u044c\u0435\u0439) \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0432 run-time \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0432\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0414\u043b\u044f \u0442\u0435\u0445, \u0443 \u043a\u043e\u0433\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435 \u043f\u043e-\u0447\u0435\u0441\u0442\u043d\u043e\u043c\u0443, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0445\u0438\u0442\u0440\u044b\u0445 \u0442\u0440\u044e\u043a\u043e\u0432, \u0445\u0430\u043a\u043e\u0432 \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c (\u043d\u0443 \u043f\u043e\u0447\u0442\u0438). \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430, \u043e\u0434\u0438\u043d \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u0438\u0434\u0430 e,x,e,o,e,e,e,e,x, \u0433\u0434\u0435 e \u2014 \u043f\u0443\u0441\u0442\u043e\u0435 \u043f\u043e\u043b\u0435, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0447\u0438\u0441\u043b\u043e 0,1 \u0438\u043b\u0438 2 \u2014 \u044d\u0442\u043e \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0411\u0443\u0434\u0435\u0442 3 \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0438 \u0445\u043e\u0434\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u0443\u0447\u0438\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438\u0433\u0440\u0430\u0442\u044c \u0441 \u0441\u0430\u043c\u0438\u043c \u0441\u043e\u0431\u043e\u0439 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0440\u043e\u0432\u043d\u044f\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u041a\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u2014 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <a href=\"http:\/\/faslib.com\">faslib<\/a>. \u042d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 a\u0441\u043f\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0439 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0442\u0438\u043f\u043e\u0432. \u0422\u0435\u043c\u044b <acronym>\u0410\u041e\u041f<\/acronym>, \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043a\u0430\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0442\u0438\u043f\u043e\u0432 \u0438 \u043c\u0435\u0442\u0430-\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u044b\u0433\u0440\u0430\u0442\u044c, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 github (faslib \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043a\u0430\u043a \u0441\u0443\u0431\u043c\u043e\u0434\u0443\u043b\u044c):  <\/p>\n<pre><code class=\"bash\">git clone https:\/\/github.com\/migashko\/tictactoe.git cd tictactoe\/ git submodule init git submodule update <\/code><\/pre>\n<p>  \u0423\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e cmake \u0438 c++ \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b, \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u0433\u0440\u0443:  <\/p>\n<pre><code class=\"bash\">.\/tictactoe.py <\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 cmake. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a, \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e:  <\/p>\n<pre><code class=\"bash\">mkdir build cd .\/build cmake .. make tictactoe <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0443\u043d\u0434\u0430 \u0438\u0433\u0440\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">Level [0,1,2]: 2 Figure [X,x,1,O,o,0]: o compiling... - - - - X - - - -  Move [0..8, a1..c3]: a2 compiling... - O - - X - X - -  Move [0..8, a1..c3]: a3 compiling... X O O - X - X - -  Move [0..8, a1..c3]: b2 BUSSY Move [0..8, a1..c3]: b1 compiling... X O O O X - X - X X winner (compiler) <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0421\u043a\u0440\u0438\u043f\u0442 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0433\u0440\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 \u0444\u0430\u0439\u043b level.inl \u0447\u0438\u0441\u043b\u043e, \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u0434\u0430\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0430 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0445\u043e\u0434\u0430 \u0432 \u0444\u0430\u0439\u043b board.inl \u043d\u043e\u0432\u0443\u044e \u0440\u0430\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0444\u0438\u0433\u0443\u0440 (\u043a\u0440\u0435\u0441\u0442\u0438\u043a\u043e\u0432 \u0438\u043b\u0438 \u043d\u043e\u043b\u0438\u043a\u043e\u0432), \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044f \u043a\u043e\u0442\u043e\u0440\u0443\u044e, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u0435\u043b\u0430\u0435\u0442 \u0445\u043e\u0434. \u042d\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0437\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 level.inl \u0432\u0442\u043e\u0440\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438:  <\/p>\n<pre><code class=\"bash\">echo 2 &gt; level.inl <\/code><\/pre>\n<p>  \u0430 \u0432 board.inl \u0437\u0430\u0434\u0430\u0439\u0442\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 (\u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u0441\u0442\u0440\u043e\u043a):  <\/p>\n<pre><code class=\"cpp\">e,e,e, x,o,e, e,e,e <\/code><\/pre>\n<p>  \u0438\u043b\u0438 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">echo &quot;e,e,e,x,o,e,e,e,e&quot; &gt; board.inl <\/code><\/pre>\n<p>  \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 build \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 make, \u0437\u0430\u0442\u0435\u043c .\/tictactoe.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0439<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">$&gt; make $&gt; .\/tictactoe - - - X O - - - X $&gt; make $&gt; .\/tictactoe - - X X O - - - - $&gt; make $&gt; .\/tictactoe X - - X O - - - - <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e tictactoe, \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 tictactoe_its, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0442\u0438\u044e \u0434\u043e \u043a\u043e\u043d\u0446\u0430 (\u0442\u0430\u043a\u0436\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438). \u0414\u043b\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0444\u0438\u0433\u0443\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f board.inl. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u0438\u044e \u0441 \u043d\u0430\u0447\u0430\u043b\u0430, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b.   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441 \u0434\u0432\u0443\u043c\u044f \u0445\u043e\u0434\u0430\u043c\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">$&gt; .\/tictactoe_its  - - - X O - - - -  X - - X O - - - -  X - - X O - O - -  X - X X O - O - -  X O X X O - O - -  X O X X O - O X -  Draw <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0438\u0447\u0435\u0439\u043d\u0430\u044f \u0441\u043c\u0435\u0440\u0442\u044c.<\/p>\n<p>  \u0411\u0435\u0441\u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c:  <\/p>\n<ol>\n<li> \u0425\u043e\u0434\u0438\u043c \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0449\u0443\u044e \u043a \u043f\u043e\u0431\u0435\u0434\u0435 <\/li>\n<li> \u0411\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0431\u0435\u0434\u0443 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 <\/li>\n<li> <s>\u0412\u0438\u043b\u043a\u0430<\/s> <\/li>\n<li> \u0412 \u0446\u0435\u043d\u0442\u0440 <\/li>\n<li> <s> \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a \u043f\u043e\u0448\u0435\u043b \u0432 \u0443\u0433\u043e\u043b, \u0445\u043e\u0434 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0439 \u0443\u0433\u043e\u043b<\/s> <\/li>\n<li> \u0412 \u043b\u044e\u0431\u043e\u0439 \u0443\u0433\u043e\u043b <\/li>\n<li> \u0412 \u043b\u044e\u0431\u0443\u044e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e <\/li>\n<\/ol>\n<p>  \u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0443\u043d\u043a\u0442\u044b 3 \u0438 5. \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443, \u0434\u0430\u0436\u0435 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043f\u0443\u043d\u043a\u0442\u043e\u0432 3 \u0438 5, \u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u0432\u0435\u0434\u0435\u0442 \u0438\u0433\u0440\u0443 \u043a \u043d\u0438\u0447\u044c\u0435\u0439. \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044b\u0439 \u043f\u0443\u043d\u043a\u0442, \u0430 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c, \u043d\u0443\u043b\u0435\u0432\u043e\u043c, \u0448\u0435\u0441\u0442\u043e\u0439.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0448\u0430\u043d\u0441 \u0432\u044b\u0438\u0433\u0440\u0430\u0442\u044c \u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0445\u043e\u0434 \u0432 \u0441\u0430\u043c\u0443\u044e \u201c\u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e\u201d \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u2014 \u0432 \u0431\u043e\u043a\u043e\u0432\u0443\u044e \u043a\u043b\u0435\u0442\u043a\u0443. \u0425\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043d\u043e\u043b\u0438\u043a\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0446\u0435\u043d\u0442\u0440. \u0412\u0430\u0448 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0445\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0445 \u0443\u0433\u043b\u043e\u0432, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0445\u043e\u0434\u0430. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0441\u043b\u0435\u0434\u0443\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443, \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0445\u043e\u0434 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0443\u0433\u043b\u043e\u0432, \u0438, \u0435\u0441\u043b\u0438 \u043e\u043d \u0432\u044b\u0431\u0435\u0440\u0435\u0442 \u0443\u0433\u043e\u043b \u043d\u0435 \u0440\u044f\u0434\u043e\u043c \u0441 \u0432\u0430\u0448\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u0445\u043e\u0434\u043e\u043c, \u0442\u043e \u0432\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0438\u043b\u043a\u0443 \u0438 \u0432\u044b\u0438\u0433\u0440\u0430\u0442\u044c.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u0438\u043b\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">e&gt; .\/tictactoe.py Level [0,1,2]: 2 Figure [X,x,1,O,o,0]: x Move [0..8, a1..c3]: b1 compiling\u2026 - - - X O - - - -  Move [0..8, a1..c3]: c3 compiling... - - O X O - - - X  Move [0..8, a1..c3]: c1 compiling... - - O X O - X O X  Move [0..8, a1..c3]: a1 compiling... X - O X O - X O X X winner (you) <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0438\u0433\u0440\u044b \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u043c \u0438 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c\u0443. \u0414\u0430\u043b\u0435\u0435 \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043d\u0435\u043f\u043b\u043e\u0445\u0438\u0435 \u0437\u043d\u0430\u043d\u0438\u044f C++, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u044f \u0434\u0430\u043c \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 faslib (\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0433\u0440\u044b), \u0434\u0430\u043b\u0435\u0435 \u043d\u0430\u0443\u0447\u0438\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0445\u043e\u0434, \u0432\u044b\u044f\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044f \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0438\u0447\u044c\u044e. \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430\u0443\u0447\u0438\u043c \u0435\u0433\u043e \u0438\u0433\u0440\u0430\u0442\u044c \u0432\u0441\u044e \u043f\u0430\u0440\u0442\u0438\u044e \u0441 \u0441\u0430\u043c\u0438\u043c \u0441\u043e\u0431\u043e\u0439.<\/p>\n<h2>\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 faslib<\/h2>\n<p>  \u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u043a\u0430\u0436\u0434\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f (\u0434\u0430\u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f) \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b. faslib \u2014 \u044d\u0442\u043e \u043c\u0435\u0442\u0430-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, run-time \u043a\u043e\u0434\u0430 \u0442\u0430\u043c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043c\u0435\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043c\u0435\u0442\u0430-\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b. <\/p>\n<p>  \u041d\u0430 \u0434\u0438\u0437\u0430\u0439\u043d faslib \u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u0421\u043f\u0438\u0441\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 (<a href=\"https:\/\/github.com\/migashko\/faslib\/tree\/master\/fas\/type_list\">fas\/type_list<\/a>), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0442\u0438\u043f\u0430\u043c\u0438 (<a href=\"https:\/\/github.com\/migashko\/faslib\/tree\/master\/fas\/typemanip\">fas\/typemanip<\/a>) \u2014 \u044d\u0442\u043e, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, <a href=\"http:\/\/ru.wikipedia.org\/wiki\/Loki\">Loki<\/a>. \u041c\u043d\u043e\u0433\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 typemanip \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u043c\u0438 &lt;type_traits&gt; \u0432 c++11. \u0418\u0434\u0435\u0438 \u0434\u043b\u044f \u043f\u0430\u043a\u0435\u0442\u0430 <a href=\"https:\/\/github.com\/migashko\/faslib\/tree\/master\/fas\/mp\">fas\/mp<\/a> (placeholder expressions \u0438 \u043b\u044f\u043c\u0431\u0434\u0430 \u043c\u0435\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438) \u0438 <a href=\"https:\/\/github.com\/migashko\/faslib\/tree\/master\/fas\/integral\">fas\/integral<\/a>(\u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043d\u0430\u0434 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u043d\u0438\u043c\u0438) \u0432\u0437\u044f\u0442\u044b \u0438\u0437 boost::mpl. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0434\u043b\u044f <a href=\"https:\/\/github.com\/migashko\/faslib\/tree\/master\/fas\/algorithm\">\u043c\u0435\u0442\u0430-\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432<\/a> \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u043c\u0438 \u043d\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b STL.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u0430, \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u0451\u0440\u0442\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">typedef fas::int_&lt;2&gt; level; <\/code><\/pre>\n<p>  \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 fas\/integral. \u0422\u0430\u043c \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">std::cout &lt;&lt; fas::int_&lt;1&gt;::value &lt;&lt; std::endl; \/\/ 1 std::cout &lt;&lt; fas::plus&lt; fas::int_&lt;1&gt;, fas::int_&lt;2&gt; &gt;::value            &lt;&lt; std::endl; \/\/ 3 <\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u043e\u0431\u0449\u0435\u0435 \u043a\u0440\u0430\u0442\u043d\u043e\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c <a href=\"https:\/\/github.com\/migashko\/faslib\/blob\/master\/tutorial\/algorithm\/algorithm4.cpp\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  \u0412 \u043f\u0430\u043a\u0435\u0442\u0435 fas\/typemanip \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f same_type \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u043b\u0438 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430:  <\/p>\n<pre><code class=\"cpp\">std::cout &lt;&lt; fas::same_type&lt;int, long&gt;::value; \/\/ 0  std::cout &lt;&lt; fas::same_type&lt;int, int&gt;::value;  \/\/ 1  <\/code><\/pre>\n<p>  \u041f\u0430\u0440\u044b \u0438 \u043a\u043e\u0440\u0442\u0435\u0436\u0438 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 \u0438\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438:  <\/p>\n<pre><code class=\"cpp\">typedef fas::pair&lt; fas::int_&lt;1&gt;, fas::int_&lt;2&gt; &gt; pair; typedef fas::tuple&lt; fas::int_&lt;3&gt;, fas::int_&lt;4&gt;, fas::int_&lt;5&gt; &gt; tuple;  std::cout &lt;&lt; fas::first&lt;pair&gt;::type::value &lt;&lt; std::endl;   \/\/ 1 std::cout &lt;&lt; fas::second&lt;tuple&gt;::type::value &lt;&lt; std::endl; \/\/ 4 std::cout &lt;&lt; fas::third&lt;tuple&gt;::type::value &lt;&lt; std::endl;  \/\/ 5 <\/code><\/pre>\n<p>  \u041a\u043e\u0440\u0442\u0435\u0436 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u043e \u043f\u044f\u0442\u0438 \u0442\u0438\u043f\u043e\u0432. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0442\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438 \u0442\u0438\u043f\u043e\u0432. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0433\u043e \u0438 \u043f\u044f\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u043e\u0432: fourth \u0438 fifth.<\/p>\n<p>  \u0423\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438:  <\/p>\n<pre><code class=\"cpp\">std::cout &lt;&lt;   fas::if_&lt;      fas::true_,      fas::int_&lt;42&gt;,      fas::int_&lt;24&gt;    &gt;::type::value  &lt;&lt; std::endl; \/\/ 42   std::cout &lt;&lt;    fas::switch_&lt;      fas::case_&lt; fas::false_, fas::int_&lt;24&gt; &gt;,     fas::case_c&lt; 1, fas::int_&lt;42&gt; &gt;,      fas::default_&lt; fas::int_&lt;44&gt; &gt;    &gt;::type::value  &lt;&lt; std::endl; \/\/ 42  <\/code><\/pre>\n<p>  \u0421\u043f\u0438\u0441\u043a\u0438 \u0442\u0438\u043f\u043e\u0432. \u041d\u0435 \u0431\u0443\u0434\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e, \u0443\u043a\u0430\u0436\u0443 \u043b\u0438\u0448\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0418\u0442\u0430\u043a, \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438:  <\/p>\n<pre><code class=\"cpp\">struct empty_list {   typedef metalist::empty_list metatype; };  template&lt; typename L, typename R = empty_list &gt; struct type_list {   typedef metalist::type_list metatype;   typedef L left_type;   typedef R right_type; }; <\/code><\/pre>\n<p>  \u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0442\u0438\u043f\u043e\u0432:  <\/p>\n<pre><code class=\"cpp\">typedef fas::type_list&lt;A,   fas::type_list&lt;B,   fas::type_list&lt;C,   fas::type_list&lt;D &gt; &gt; &gt; &gt; list_abcd; \/\/ [A,B,C,D,empty_list] <\/code><\/pre>\n<p>  \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a:  <\/p>\n<pre><code class=\"cpp\">typedef fas::type_list&lt;A, B &gt; list2_ab_invalid; <\/code><\/pre>\n<p>  \u0412 faslib, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 Loki, \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0438\u043f\u043e\u043c fas::empty_list. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043d\u0435 \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c. \u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f fas::organize, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">typedef fas::type_list&lt; A, B &gt; list_ab_invalid; \/\/ [A,B] typedef fas::type_list&lt; C, D &gt; list_cd_invalid; \/\/ [C,D] typedef fas::type_list&lt; list_ab_invalid, list_cd_invalid&gt; list_abcd_invalid; \/\/ [[C,D],[C,D]] typedef fas::organize&lt;list2_abcd_invalid&gt;::type list_abcd; \/\/ [A,B,C,D,empty_list] <\/code><\/pre>\n<p>  \u0418\u0441\u043a\u0440\u0435\u043d\u043d\u0435 \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u043f\u043e\u0447\u0435\u043c\u0443 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0435\u0441\u043a\u0443 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 #define \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432, \u043c\u043e\u0436\u043d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0435\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">typedef fas::type_list_n&lt;A,B,C&gt;::type list; \/\/ [A,B,C,empty_list] <\/code><\/pre>\n<p>  \u0414\u043e c++11 type_list_n \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u043e 26 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043f\u043e\u0441\u043b\u0435 \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e (variadic templates).  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u0442\u0438\u043f\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\">\u041a\u0440\u043e\u043c\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0442\u0438\u043f\u043e\u0432 type_list_n \u043c\u043e\u0436\u0435\u0442 \u0438\u0445 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f fas::organize, \u0441\u043d\u0438\u043c\u0430\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0447\u0438\u0441\u043b\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">typedef fas::type_list_n&lt;   fas::type_list_n&lt;A,B&gt;::type, \/\/ [A,B,empty_list]   fas::type_list_n&lt;C,D&gt;::type  \/\/ [C,D,empty_list] &gt;::type list; \/\/ [A,B,C,D,empty_list] <\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0442\u0438\u043f\u043e\u0432 \u0432 faslib \u2014 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0445 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">struct list_bc: fas::type_list&lt;B, fas::type_list&lt;C&gt; &gt; {}; \/\/ [B,C,empty_list] struct list_abc: fas::type_list&lt;B, list_bc &gt; {}; \/\/ [A,list_bc] <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0442\u0438\u043f\u043e\u0432, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438, \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0438\u0445. \u041f\u043e\u044f\u0441\u043d\u044e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432:  <\/p>\n<pre><code class=\"cpp\">typedef fas::merge&lt;   list_bc,  \/\/ [B,C,empty_list]   list_abc  \/\/ [A,list_bc] &gt;::type list; \/\/ [B,C,A,list_bc] <\/code><\/pre>\n<p>  \u0422\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u044d\u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u043b\u0430 \u0431\u044b \u0441\u043f\u0438\u0441\u043e\u043a \u0432 [B,C,A,B,C,empty_list]. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 faslib \u043d\u0435 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043d\u043e \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u0442\u0430 \u043e\u043d\u0430 \u043d\u0435 \u0434\u0430\u0435\u0442 \u0432 \u043f\u043b\u0430\u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0445\u0432\u043e\u0441\u0442\u0430 \u0441\u043f\u0438\u0441\u043a\u0430. \u041d\u043e \u0441\u0430\u043c\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">template&lt;int A, int B, int C&gt; struct list123: fas::type_list_n&lt;    fas::int_&lt;A&gt;, fas::int_&lt;B&gt;, fas::int_&lt;C&gt;  &gt;::type {}; <\/code><\/pre>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043a\u0430\u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u043a\u043b\u0430\u0441\u0441\u0443 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c \u043b\u043e\u0433 \u043e\u0448\u0438\u0431\u043e\u043a:  <\/p>\n<pre><code class=\"cpp\">#include &lt;fas\/integral.hpp&gt; #include &lt;fas\/type_list.hpp&gt;  typedef fas::type_list_n&lt;    fas::int_&lt;1&gt;, fas::int_&lt;2&gt; , fas::int_&lt;2&gt;  &gt;::type list1; struct list2: list1 {};  template&lt;typename L&gt; class test {};  int main()  {   \/\/ test&lt;list2&gt; tst;   test&lt;list1&gt; tst;   tst.doit(); } <\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u0441\u0442 \u0447\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430 \u044d\u0442\u043e\u0433\u043e:  <\/p>\n<pre><code class=\"bash\">error: \u2018class test&lt;fas::type_list&lt;fas::int_&lt;1&gt;, fas::type_list&lt;fas::int_&lt;2&gt;, fas::type_list&lt;fas::int_&lt;2&gt;, fas::empty_list&gt; &gt; &gt; &gt;\u2019 has no member named \u2018doit\u2019 <\/code><\/pre>\n<p>  \u0430 \u0434\u043b\u044f list2:  <\/p>\n<pre><code class=\"bash\">error: \u2018class test&lt;list2&gt;\u2019 has no member named \u2018doit\u2019 <\/code><\/pre>\n<p>  \u0412\u044b \u043f\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442\u0435 \u0440\u0430\u0437\u043d\u0438\u0446\u0443, \u0435\u0441\u043b\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0441 \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0418\u0442\u0430\u043a, \u0440\u0430\u0441\u043a\u0440\u043e\u0435\u043c \u0442\u0430\u0439\u043d\u0443, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0435\u0439 \u0434\u043b\u0438\u043d\u0443 \u0441\u043f\u0438\u0441\u043a\u0430. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename L, typename R&gt; struct length;  template&lt;typename L, typename R&gt; struct length&lt; type_list&lt;L, R&gt; &gt; {   enum { value = 1 + length&lt;R&gt;::value }; };  template&lt;&gt; struct length&lt; empty_list &gt; {   enum { value = 0 }; }; <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 length, \u0432 \u044d\u0442\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u0440\u0438\u0434\u0435\u0442 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u043e\u0442 \u043f\u0440\u043e\u0447\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u044b\u0439 metatype, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 fas::type_list \u0438 fas::empty_list, \u043e\u0431\u044a\u044f\u0432\u0438\u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename L&gt; struct length   : length_impl&lt;typename L::metatype, L&gt; {};  template&lt;typename L&gt; struct length_impl&lt;metalist::type_list, L&gt; {   typedef typename L::right_type tail;   enum { value = 1 + length&lt; tail&gt;::value }; };  template&lt;typename L&gt; struct length_impl&lt;metalist::empty_list, L&gt; {   enum { value = 0 }; }; <\/code><\/pre>\n<p>  \u0418\u0434\u0435\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 length \u043f\u043e fas::type_list \u0438\u043b\u0438 fas::empty_list, \u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0442\u0438\u043f\u0430 metatype, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435. \u0415\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0438\u043b\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u043c fas::metalist::type_list \u0438\u043b\u0438 fas::metalist::empty_list, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 length&lt; type_list&lt;L, R&gt; &gt; \u0438 length&lt; empty_list &gt;, \u0442\u043e \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u043c, \u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 g++) \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0435\u0437 \u201c\u0432\u0441\u043a\u0440\u044b\u0442\u0438\u044f\u201d \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. <\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0443\u043c\u0435\u044e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u044c. \u042d\u0442\u0430 \u043e\u043f\u0446\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u0442.\u043a. \u043e\u043d\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0442\u0438\u043f\u043e\u0432, \u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c FASLIB_TYPE_LIST_CHECK, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 CMakeLists.txt:<\/p>\n<p>  #add_definitions(-DFASLIB_TYPE_LIST_CHECK)<\/p>\n<p>  \u0422\u0430\u043c \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043f\u043e type_list, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e \u043c\u0435\u0442\u0430\u0442\u0438\u043f\u0443, \u0438 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438:<\/p>\n<p>  #add_definitions(-DDISABLE_TYPE_LIST_SPEC)  <\/div>\n<\/div>\n<p>  \u0414\u0430\u043b\u0435\u0435, \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043f\u0440\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432, \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c empty_list \u044f \u043d\u0435 \u0431\u0443\u0434\u0443. \u0411\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0442\u0438\u043f\u043e\u0432.   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 type_list_n?<\/b><\/p>\n<div class=\"spoiler_text\">\u0421\u043b\u0435\u0433\u043a\u0430 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0430\u044f, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">template&lt; typename T1 = empty_list,  typename T2 = empty_list,           typename T3 = empty_list,  typename T4 = empty_list,           typename T5 = empty_list,  typename T6 = empty_list,           typename T7 = empty_list,  typename T8 = empty_list,           typename T9 = empty_list,  typename T10 = empty_list,            typename T11 = empty_list, typename T12 = empty_list,           typename T13 = empty_list, typename T14 = empty_list,            typename T15 = empty_list, typename T16 = empty_list,            typename T17 = empty_list, typename T18 = empty_list,           typename T19 = empty_list, typename T20 = empty_list,            typename T21 = empty_list, typename T22 = empty_list,            typename T23 = empty_list, typename T24 = empty_list,           typename T25 = empty_list, typename T26 = empty_list &gt; struct type_list_n {   typedef        type_list&lt; T1,  type_list&lt; T2,  type_list&lt; T3,  type_list&lt; T4,       type_list&lt; T5,  type_list&lt; T6,  type_list&lt; T7,  type_list&lt; T8,       type_list&lt; T9,  type_list&lt; T10, type_list&lt; T11, type_list&lt; T12,       type_list&lt; T13, type_list&lt; T14, type_list&lt; T15, type_list&lt; T16,       type_list&lt; T17, type_list&lt; T18, type_list&lt; T19, type_list&lt; T20,       type_list&lt; T21, type_list&lt; T22, type_list&lt; T23, type_list&lt; T24,       type_list&lt; T25, type_list&lt; T26       &gt; &gt;           &gt; &gt; &gt; &gt;                   &gt; &gt; &gt; &gt; &gt; &gt;             &gt; &gt;                   &gt; &gt; &gt; &gt; &gt; &gt;           &gt; &gt; &gt; &gt;       &gt; &gt;   bar;      typedef typename organize&lt;bar&gt;::type type; }; <\/code><\/pre>\n<p>  \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u0438\u0437 \u0432\u0441\u0435\u0445 26 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0431\u0443\u0434\u0443\u0442 \u044f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0430 \u0445\u0432\u043e\u0441\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 fas::empty_list \u2014 \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 faslib. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f fas::organize \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u0435 fas::empty_list \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u0438\u0437 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>  \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f \u0441++11:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Head = fas::empty_list, typename ...Args &gt; struct type_list_n  {   typedef typename fas::organize&lt;     fas::type_list&lt;        Head,        typename type_list_n&lt;Args...&gt;::type      &gt;   &gt;::type type; };  template&lt;&gt; struct type_list_n&lt;&gt; {   typedef fas::empty_list type; }; <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u2014 fas::organize \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u0441\u043f\u0438\u0441\u043a\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0435\u0433\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u043f\u043e\u0442\u043e\u043c \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0435\u0433\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c. \u0417\u0434\u0435\u0441\u044c fas::organize \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 fas::type_list_n.  <\/div>\n<\/div>\n<h4>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0442\u0438\u043f\u043e\u0432<\/h4>\n<p>  \u0414\u043b\u044f \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0442\u0438\u043f\u043e\u0432 \u0435\u0441\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u0438\u043c\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 L, \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u0438\u043f T \u0438 \u0438\u043d\u0434\u0435\u043a\u0441 I \u2014 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f. \u0414\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u0435\u0441\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 \u0441 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043e\u043c _c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">typedef fas::erase&lt; fas::int_&lt;0&gt;, fas::type_list&lt;char&gt; &gt;::type empty; typedef fas::erase_c&lt; 0, fas::type_list&lt;char&gt; &gt;::type empty; <\/code><\/pre>\n<p>  \u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0442\u0438\u043f\u043e\u0432:  <\/p>\n<ul>\n<li> <b><code> erase&lt;I,L&gt;::type <\/code><\/b><br \/>   <b><code> erase_c&lt;int,L&gt;::type <\/code><\/b><br \/>   \u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 I \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 L <\/li>\n<li> <b><code> head&lt;L&gt;::type <\/code><\/b><br \/>   \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 L (\u0433\u043e\u043b\u043e\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430) <\/li>\n<li> <b><code> index_of&lt;T,L&gt;::value <\/code><\/b><br \/>   \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 T \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 L. \u0415\u0441\u043b\u0438 \u0442\u0438\u043f \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u0442\u043e -1<\/li>\n<li> <b><code> length&lt;L&gt;::value <\/code><\/b><br \/>   \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 L <\/li>\n<li> <b><code> merge&lt;L1,L2&gt;::type <\/code><\/b><br \/>   \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0434\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 L1 \u0438 L2 \u0432 \u043e\u0434\u0438\u043d \u0441\u043f\u0438\u0441\u043e\u043a <\/li>\n<li> <b><code> organize&lt;L&gt;::type <\/code><\/b><br \/>   \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 L \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. <\/li>\n<li> <b><code> normalize&lt;L&gt;::type <\/code><\/b><br \/>   \u0422\u043e \u0436\u0435 \u0447\u0442\u043e organize, \u043d\u043e \u0435\u0441\u043b\u0438 L \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0442\u0438\u043f\u043e\u0432, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 <\/li>\n<li> <b><code> push_back&lt;T,L&gt;::type <\/code><\/b><br \/>   \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0438\u043f T \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u043f\u0438\u0441\u043a\u0430 L <\/li>\n<li> <b><code> push_front&lt;T,L&gt;::type <\/code><\/b><br \/>   \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0438\u043f T \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u043f\u0438\u0441\u043a\u0430 L <\/li>\n<li> <b><code> reverse&lt;L&gt;::type <\/code><\/b><br \/>   \u041c\u0435\u043d\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u0430 L \u043d\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0439 <\/li>\n<li> <b><code> split&lt;I,L&gt;::left_list <\/code><\/b><br \/>  <b><code>split&lt;I,L&gt;::right_list <\/code><\/b><br \/>  <b><code>split_c&lt;int,L&gt;::left_list <\/code><\/b><br \/>  <b><code>split_c&lt;int,L&gt;::right_list <\/code><\/b><br \/>   \u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a L \u043d\u0430 \u0434\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 I <\/li>\n<li> <b><code> tail&lt;L&gt;::type <\/code><\/b><br \/>   \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0445\u0432\u043e\u0441\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 L (\u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430) <\/li>\n<li> <b><code> type_at&lt;I,L&gt;::type <\/code><\/b><br \/>  <b><code> type_at_c&lt;int,L&gt;::type<\/code><\/b><br \/>   \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0438\u043f \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 I \u0441\u043f\u0438\u0441\u043a\u0430 L <\/li>\n<li> <b><code> type_count&lt;T,L&gt;::value <\/code><\/b><br \/>   \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0438\u043f\u043e\u0432 T \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0442\u0438\u043f\u043e\u0432 L <\/li>\n<li> <b><code> unique&lt;L&gt;::type <\/code><\/b><br \/>   \u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0442\u0438\u043f\u043e\u0432 L, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 <\/li>\n<li> <b><code> unique_first&lt;L&gt;::type <\/code><\/b><br \/>   \u0422\u043e \u0436\u0435 \u0447\u0442\u043e \u0438 unique, \u043d\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 <\/li>\n<\/ul>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u043d\u0435\u0442 \u0442\u0430\u043a\u0438\u0445 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u0430\u043a \u0437\u0430\u043c\u0435\u043d\u0430 \u0442\u0438\u043f\u0430 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 set_at (\u043e\u043d\u0430 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0445\u043e\u0434) \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 last. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0430\u043a\u0435\u0442\u044b faslib \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 fas\/aop \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 faslib. \u0410 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u0430 set_at \u043f\u0440\u043e\u0441\u0442\u043e-\u043d\u0430\u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e. \u041d\u0443 \u0447\u0442\u043e-\u0436\u0435, \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c \u044d\u0442\u043e \u043d\u0435\u0434\u043e\u0440\u0430\u0437\u0443\u043c\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 (fas::length) \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0438\u043f \u0432 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 (fas::type_at):  <\/p>\n<pre><code class=\"cpp\">template&lt;typename L&gt; struct last {   typedef typename fas::type_at_c&lt;     fas::length&lt; L &gt;::value-1,      L   &gt;::type type; }; <\/code><\/pre>\n<p>  \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f set_at \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432. \u0422\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c set_at_\u0441 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0447\u0438\u0441\u043b\u043e. \u0414\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445, \u043d\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u043e\u0449\u0435 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e:  <\/p>\n<ol>\n<li> \u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u043d\u0430 \u0434\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 (fas::split) <\/li>\n<li> \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u043e\u0442\u0440\u0435\u0437\u0430\u0435\u043c \u0433\u043e\u043b\u043e\u0432\u0443 (fas::tail) <\/li>\n<li> \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043e\u0431\u0435\u0437\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 (fas::push_front) <\/li>\n<li> \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u043b\u0435\u0432\u044b\u0439 \u0438 \u043f\u0440\u0430\u0432\u044b\u0439, \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u0441\u043f\u0438\u0441\u043a\u0438 (fas::merge) <\/li>\n<\/ol>\n<p>  <\/p>\n<pre><code class=\"cpp\">template&lt;int Pos, typename T, typename L&gt; struct set_at_c {   typedef fas::split_c&lt;Pos, L&gt; splitter;   typedef typename splitter::left_list left_list;   typedef typename splitter::right_list right_list;   typedef typename fas::tail&lt; right_list &gt;::type headless;   typedef typename fas::push_front&lt; T, headless &gt;::type pollywog;   typedef typename fas::merge&lt; left_list, pollywog &gt;::type type; };  template&lt;typename Pos, typename T, typename L&gt; struct set_at   : set_at_c&lt; Pos::value, T, L&gt; { }; <\/code><\/pre>\n<h4>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b<\/h4>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0442\u0438\u043f\u043e\u0432, \u0432 faslib \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0440\u044f\u0434 compile-time \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432, \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438 stl. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u0435\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u044f ( \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0442\u0438\u043f type \u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u043f). \u041c\u043d\u043e\u0433\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434, \u043f\u043e\u043c\u0438\u043c\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432, \u0443\u043d\u0430\u0440\u043d\u0443\u044e \u0438\u043b\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u2014 \u044d\u0442\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u0430\u044f \u043c\u0435\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u043b\u0438 \u0434\u0432\u0443\u043c\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438. \u0415\u0441\u043b\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0443\u043d\u0430\u0440\u043d\u044b\u0439 \u0438\u043b\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 (\u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u044f). \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0430 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 fas\/typemanip (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, same_type, super_subclass) \u0438\u043b\u0438 \u043a\u043b\u0430\u0441\u0441\u044b stl &lt;type_traits&gt; (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, std::is_base_of, \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 c++11).<\/p>\n<p>  \u0412\u0441\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\/\u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u044b, \u0438\u043c\u0435\u044e\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u0441 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043e\u043c _t, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u044b \u0432 \u0432\u0438\u0434\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445-\u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename L, template&lt;typename&gt; class F &gt; struct transform_t; <\/code><\/pre>\n<p>  \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 L \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e F, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">typedef fas::type_list_n&lt; fas::int_&lt;1&gt;, fas::int_&lt;2&gt;,                            fas::int_&lt;3&gt;, fas::int_&lt;4&gt; &gt;::type lst; typedef fas::transform_t&lt;lst2, fas::inc &gt;::type res; \/\/ [2,3,4,5] <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u0435\u0437 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 placeholder expressions:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename L, typename F &gt; struct transform; <\/code><\/pre>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">typedef fas::transform&lt;lst, fas::inc&lt; fas::_ &gt; &gt;::type res2; <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u0430\u0445<\/b><\/p>\n<div class=\"spoiler_text\">\u041f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u044b \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0447\u0435\u043c \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0432\u0441\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e boost::mpl \u0438 c++11, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0432 faslib \u0438\u0445 \u0432\u0441\u0435\u0433\u043e \u043f\u044f\u0442\u044c: _1, _2, _3, _4, _5 \u0438 \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 _, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0449\u0435 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445:  <\/p>\n<table>\n<tr>\n<th>\u041f\u0440\u0438\u043c\u0435\u0440<\/th>\n<th>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430<\/th>\n<\/tr>\n<tr>\n<td>foo&lt;_&gt;<\/td>\n<td>foo&lt;_1&gt;<\/td>\n<\/tr>\n<tr>\n<td>foo&lt;_,_&gt;<\/td>\n<td>foo&lt;_1,_2&gt;<\/td>\n<\/tr>\n<tr>\n<td>foo&lt;_1,_,_2&gt;<\/td>\n<td>foo&lt;_1,_1,_2&gt;<\/td>\n<\/tr>\n<tr>\n<td>foo&lt;_1,_,_2,_,_&gt;<\/td>\n<td>foo&lt;_1,_1,_2,_2,_3&gt;<\/td>\n<\/tr>\n<\/table>\n<p>  \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043f\u0435\u0440\u0432\u044b\u0439 _ \u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d _1, \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 _2 \u0438 \u0442.\u0434. \u0415\u0441\u043b\u0438 \u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u044b \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u0442 _, \u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0438\u043d\u0430\u0447\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u043e\u043d\u0438 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u0443\u0434\u043e\u0431\u043d\u044b.<\/p>\n<p>  \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 fas::transform \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e fas::inc, \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443. \u041e\u0434\u043d\u0430\u043a\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0438\u043f \u0432\u0438\u0434\u0430 fas::integral_c&lt;int, 4&gt; \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u043c fas::int_&lt;4&gt;, \u043d\u043e \u044d\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0438\u043f. \u0414\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f fas::integral_c \u0432 fas::int_ \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e fas::make_int:   <\/p>\n<pre><code class=\"cpp\">typedef fas::transform&lt;   lst,    fas::make_int&lt; fas::inc&lt; fas::_ &gt; &gt;  &gt;::type res2; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0421\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432:  <\/p>\n<ul>\n<li> <b><code> accumulate&lt;L, I, F&lt;_,_&gt;=plus &gt; <\/code><\/b><br \/>   \u0414\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0441\u0443\u043c\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f I \u0438 \u0441\u043f\u0438\u0441\u043a\u0430 L \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e F (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435). \u041c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0442.\u043a. \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430 T \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 L, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 F&lt;Pred, T&gt;, \u0433\u0434\u0435 Pred \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f I, \u0430 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e F <\/li>\n<li> <b><code> count&lt;T, L&gt; <\/code><\/b><br \/>   \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0438\u043f\u043e\u0432 T \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0442\u0438\u043f\u043e\u0432 L, \u0430\u043d\u0430\u043b\u043e\u0433 fas::type_count, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 fas::count_if \u0438 fas::same_type<\/li>\n<li> <b><code> count_if&lt;L, \u0421&lt;_&gt; &gt; <\/code><\/b><br \/>   \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0438\u043f\u043e\u0432 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 L, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044e C&lt;_&gt; <\/li>\n<li> <b><code> erase_if&lt;L, C&lt;_&gt; &gt; <\/code><\/b><br \/>   \u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 L, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044e C&lt;_&gt; <\/li>\n<li> <b><code> find_if&lt;L, C&lt;_&gt; &gt; <\/code><\/b><br \/>   \u041d\u0430\u0445\u043e\u0434\u0438\u0442 \u0442\u0438\u043f \u0432 \u0441\u043f\u0438\u0441\u043a\u0435, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0439 \u0443\u0441\u043b\u043e\u0432\u0438\u044e C&lt;_&gt; (\u043f\u0435\u0440\u0432\u043e\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435) <\/li>\n<li> <b><code> for_&lt;I, C&lt;_&gt;, F&lt;_&gt; &gt; <\/code><\/b><br \/>   \u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 F&lt;_&gt; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f I, \u043f\u043e\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u0435 C&lt;_&gt; <\/li>\n<li> <b><code> generator&lt; T, F&lt;_&gt; &gt; <\/code><\/b><br \/>   \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f F<\/li>\n<li> <b><code> generate&lt; N, F &gt; <\/code><\/b><br \/>   \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u0434\u043b\u0438\u043d\u043d\u043e\u0439 N, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0442\u0438\u043f\u043e\u0432 F (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, fas::generator)<\/li>\n<li> <b><code> index_of_if&lt;L, C&lt;_&gt; &gt; <\/code><\/b><br \/>   \u041f\u043e\u0437\u0438\u0446\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0442\u0438\u043f\u043e\u0432, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0435\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044e C&lt;_&gt; <\/li>\n<li> <b><code> is_sorted&lt;L, \u0421&lt;_,_&gt;=less &gt; <\/code><\/b><br \/>   \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 L, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 C<\/li>\n<li> <b><code> random_shuffle&lt;R, L&gt; <\/code><\/b><br \/>   \u041f\u0441\u0435\u0432\u0434\u043e-\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 L, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f R \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0435\u0440\u043d\u0430<\/li>\n<li> <b><code> select&lt; L, \u0421&lt;_&gt; &gt; <\/code><\/b><br \/>   \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0442\u0438\u043f\u044b \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 L, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044e C&lt;_&gt;. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432. <\/li>\n<li> <b><code> shuffle&lt; L, RL&gt; <\/code><\/b><br \/>   \u041f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 L, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 RL <\/li>\n<li> <b><code> sort&lt;L, \u0421&lt;_,_&gt;=less &gt; <\/code><\/b><br \/>   \u0421\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 L <\/li>\n<li> <b><code> transform&lt;L, F&lt;_&gt; &gt; <\/code><\/b><br \/>   \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c F&lt;_&gt; <\/li>\n<li> <b><code> transform2&lt;L1, L2, F&lt;_,_&gt; &gt; <\/code><\/b><br \/>   \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432, \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c F&lt;_1,_2&gt;, \u0433\u0434\u0435 _1 \u0438 _2 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e <\/li>\n<li> <b><code> transform_if&lt; L, F&lt;_&gt;, C&lt;_&gt; &gt; <\/code><\/b><br \/>   \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432, \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c F&lt;_&gt;, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 C&lt;_&gt;. \u0415\u0441\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0442\u043e \u0442\u0438\u043f \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f <\/li>\n<li> <b><code> transform_tail&lt;L, F&lt;_&gt; &gt; <\/code><\/b><br \/>   \u0418\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0445\u0432\u043e\u0441\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0430\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0433\u043e\u043b\u043e\u0432\u044b \u0441\u043f\u0438\u0441\u043a\u0430) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f F&lt;_&gt; <\/li>\n<li> <b><code> transform_tail_if&lt; L, F&lt;_&gt;, C&lt;_&gt; &gt; <\/code><\/b><br \/>   \u0418\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0445\u0432\u043e\u0441\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0430\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0433\u043e\u043b\u043e\u0432\u044b \u0441\u043f\u0438\u0441\u043a\u0430) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f F&lt;_&gt;, \u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f C&lt;_&gt; <\/li>\n<li> <b><code> unique_if&lt;L, \u0421&lt;_,_&gt;=same_type &gt; <\/code><\/b><br \/>   \u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u0421&lt;_,_&gt; \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 <\/li>\n<li> <b><code> unique_first_if&lt;L, \u0421&lt;_,_&gt;=same_type &gt; <\/code><\/b><br \/>   \u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u0421&lt;_,_&gt; \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043f\u0435\u0440\u0432\u043e\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 <\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 compile-time \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438:   <\/p>\n<pre><code class=\"cpp\">typedef fas::type_list_n&lt;    fas::int_&lt;3&gt;, fas::int_&lt;2&gt;,    fas::int_&lt;3&gt;, fas::int_&lt;1&gt;  &gt;::type list1; \/\/[3,2,3,1]  typedef fas::sort_t&lt;list1&gt;::type res1; \/\/[1,2,3,3] typedef fas::sort&lt;list1&gt;::type res2;   \/\/[1,2,3,3]  typedef fas::sort_t&lt;list1, fas::greater&gt;::type res3; \/\/[3,3,2,1] typedef fas::sort&lt;   list1,    fas::greater&lt; fas::_1, fas::_2&gt;  &gt;::type res4;   \/\/[3,3,2,1] typedef fas::sort&lt;   list1,    fas::greater&lt; fas::_2, fas::_1&gt;  &gt;::type res5;   \/\/[1,2,3,3] <\/code><\/pre>\n<p>  \u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f\u044b \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">struct A{}; struct B:A{}; struct C:B{}; struct D:C{};  typedef fas::type_list_n&lt; C, B, A, A, D &gt;::type list2;  typedef fas::sort&lt;   list2,    fas::f&lt; fas::super_subclass&lt; fas::_1, fas::_2&gt; &gt; &gt;::type res5; \/\/ [A,A,B,C,D] <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f super_subclass \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 typemanip \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 faslib, \u0442.\u043a. \u0432 \u043d\u0435\u0439 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0442\u0438\u043f type, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e value, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 1, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0442\u0438\u043f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c \u0432\u0442\u043e\u0440\u043e\u0433\u043e, \u0438 \u043d\u043e\u043b\u044c \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u0410 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f fas::f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0442\u043e \u043d\u0435\u0434\u043e\u0440\u0430\u0437\u0443\u043c\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0432\u0430\u0448 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 c++11, \u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b fas::super_subclass, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c std::is_base_of, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0438 type \u0438 value. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0442.\u043a. \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439-\u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:  <\/p>\n<pre><code class=\"cpp\">typedef fas::sort&lt;   list2,    std::is_base_of&lt; fas::_1, fas::_2&gt;  &gt;::type res5; \/\/ [A,A,B,C,D] typedef fas::sort_t&lt;list2, std::is_base_of &gt;::type res5; \/\/ [A,A,B,C,D] <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430?<\/b><\/p>\n<div class=\"spoiler_text\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c fas::is_sorted \u0431\u0443\u0434\u0435\u0442 fas::true_, \u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c fas::sort \u043c\u0435\u043d\u044f\u0435\u0442 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044d\u0442\u043e\u0442 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d.<\/p>\n<p>  \u0414\u0430, \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u0443\u0437\u044b\u0440\u044c\u043a\u0430 \u2014 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u2014 \u044f \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u043d\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 fas::for_, fas::shuffle \u0438 fas::random_shuffle \u044f \u043e\u0442\u043d\u043e\u0448\u0443 \u043a \u0440\u0430\u0437\u0440\u044f\u0434\u0443 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445, \u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u042d\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 faslib.   <\/div>\n<\/div>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0440\u0435\u0432\u0435\u0440\u0441 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 fas::accumulate  <\/p>\n<pre><code class=\"cpp\">struct A; struct B; struct C; typedef fas::type_list_n&lt; A, B, C &gt;::type list4; typedef fas::accumulate&lt;   list4,    empty_list,    push_front&lt;_2, _1&gt;  &gt;::type res4; \/\/ [C,B,A] <\/code><\/pre>\n<p>  \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 faslib, \u043d\u043e \u044d\u0442\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438\u0433\u0440\u0430\u0442\u044c \u0432 \u043a\u0440\u0435\u0441\u0442\u0438\u043a\u0438-\u043d\u043e\u043b\u0438\u043a\u0438.<\/p>\n<h4>\u041a\u0440\u0435\u0441\u0442\u0438\u043a\u0438-\u043d\u043e\u043b\u0438\u043a\u0438. \u041e\u0434\u0438\u043d \u0445\u043e\u0434<\/h4>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0442\u0438\u043f\u044b \u043a\u0440\u0435\u0441\u0442\u0438\u043a\u043e\u0432, \u043d\u043e\u043b\u0438\u043a\u043e\u0432 \u0438 \u043f\u0443\u0441\u0442\u043e\u0435 \u043f\u043e\u043b\u0435:  <\/p>\n<pre><code class=\"cpp\">struct e {}; struct x {}; struct o {}; <\/code><\/pre>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438 \u0438\u0433\u0440\u043e\u0432\u0443\u044e \u0434\u043e\u0441\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 python \u0441\u043a\u0440\u0438\u043f\u0442:  <\/p>\n<pre><code class=\"cpp\">typedef fas::int_&lt;   #include &quot;level.inl&quot;  &gt; level;  typedef fas::type_list_n&lt;   #include &quot;board.inl&quot;  &gt;::type board; <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b\u044b *.lnl \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442, \u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0438\u0445 (\u0441\u043c. CMakeLists.txt). \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0443\u0441\u0442\u0430\u044f \u0434\u043e\u0441\u043a\u0430. \u0422\u0430\u043a \u0436\u0435 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0444\u0430\u0439\u043b rand.inl \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u2014 \u0435\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0445\u043e\u0434\u043e\u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"cpp\">typedef fas::int_&lt;    #include &quot;rand.inl&quot;  &gt; initial_rand; <\/code><\/pre>\n<p>  \u041f\u0443\u0441\u0442\u0430\u044f \u0434\u043e\u0441\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">typedef fas::type_list_n&lt;     e, e, e,      e, e, e,      e, e, e &gt;::type empty_board; <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0433\u0440\u043e\u0432\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d. \u0412\u044b\u0432\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438:  <\/p>\n<pre><code class=\"cpp\">std::ostream& operator&lt;&lt;(std::ostream& s,  e)  {   s &lt;&lt; &quot;-&quot;; }  std::ostream& operator&lt;&lt;(std::ostream& s,  o)  {   s &lt;&lt; &quot;O&quot;; }  std::ostream& operator&lt;&lt;(std::ostream& s,  x)  {   s &lt;&lt; &quot;X&quot;; } <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u043c, \u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043b\u0438\u043d\u0438\u044e \u0441 \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename L, typename R&gt; std::ostream& operator&lt;&lt;(std::ostream& s,  fas::type_list&lt;L, R&gt;)  {   s &lt;&lt; L(); \/\/ \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f   int len = fas::length&lt;R&gt;::value; \/\/ \u0434\u043b\u0438\u043d\u0430 \u0445\u0432\u043e\u0441\u0442\u0430 \u0441\u043f\u0438\u0441\u043a\u0430   if ( len%3 == 0 ) \/\/ \u0435\u0441\u043b\u0438 \u0434\u043b\u0438\u043d\u0430 \u0445\u0432\u043e\u0441\u0442\u0430 \u043a\u0440\u0430\u0442\u043d\u0430 \u0442\u0440\u0435\u043c, \u0442\u043e \u0441 \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438     s &lt;&lt; std::endl;   else if (len != 0) \/\/ \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0442\u043e \u043f\u0440\u043e\u0431\u0435\u043b     s &lt;&lt;  &quot; &quot;;   s &lt;&lt; R(); \/\/ \u201c\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u201d \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0445\u0432\u043e\u0441\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 }  std::ostream& operator&lt;&lt;(std::ostream& s, fas::empty_list)  {   \/\/ \u041a\u043e\u043d\u0435\u0446 \u0441\u043f\u0438\u0441\u043a\u0430. \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c } <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u201c\u0445\u043e\u0434\u0430\u201d \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0440\u0442\u0435\u0436 \u0438\u0437 \u0442\u0440\u0435\u0445 \u0442\u0438\u043f\u043e\u0432:  <\/p>\n<ol>\n<li>\u041f\u043e\u0437\u0438\u0446\u0438\u044f, \u043a\u0443\u0434\u0430 \u0441\u0434\u0435\u043b\u0430\u043d \u0445\u043e\u0434. \u0415\u0441\u043b\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0440\u0430\u0432\u043d\u0430 fas::int_&lt;-1&gt;, \u0437\u043d\u0430\u0447\u0438\u0442, \u0445\u043e\u0434 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d (\u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u0438\u0447\u0435\u0439\u043d\u0430\u044f, \u043b\u0438\u0431\u043e \u043f\u043e\u0431\u0435\u0434\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0438\u0433\u0440\u043e\u043a\u043e\u0432)<\/li>\n<li>\u0424\u0438\u0433\u0443\u0440\u0430 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044f. \u0415\u0441\u043b\u0438 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044f \u043d\u0435\u0442, \u0442\u043e \u0442\u0438\u043f e (\u043f\u0443\u0441\u0442\u043e\u0435 \u043f\u043e\u043b\u0435)<\/li>\n<li>\u0414\u043e\u0441\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u0445\u043e\u0434\u0430 (\u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432). \u0415\u0441\u043b\u0438 \u0445\u043e\u0434 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d, \u0442\u043e \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a<\/li>\n<\/ol>\n<p>  \u0414\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u201c\u0445\u043e\u0434\u0430\u201d \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Pos, typename Fig, typename Board&gt; std::ostream& operator&lt;&lt; ( std::ostream& s, fas::tuple&lt; Pos, Fig, Board&gt; )  {    s &lt;&lt; Board(); \/\/ \u0435\u0441\u043b\u0438 Board \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0442\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442      enum {     \/\/ \u043d\u0435\u0442 \u0445\u043e\u0434\u0430     nopos   = fas::same_type&lt; Pos, fas::int_&lt;-1&gt; &gt;::value,      \/\/ \u043d\u0435\u0442 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044f     nofig   = fas::same_type&lt; e, Fig&gt;::value,    };        if ( nopos )   {     \/\/ \u0415\u0441\u043b\u0438 \u0445\u043e\u0434 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d, \u0442\u043e \u043d\u0438\u0447\u044c\u044f \u0438\u043b\u0438 \u043f\u043e\u0431\u0435\u0434\u0430 \u0438\u0433\u0440\u043e\u043a\u0430     if (nofig)       s &lt;&lt; &quot;Draw&quot; &lt;&lt; std::endl;     else       s &lt;&lt; Fig() &lt;&lt; &quot; winner (you)&quot; &lt;&lt; std::endl;   }   else if ( !nofig )   {     \/\/ \u0415\u0441\u0442\u044c \u0445\u043e\u0434 \u0438 \u043f\u043e\u0431\u0435\u0434\u043d\u0430\u044f \u0444\u0438\u0433\u0443\u0440\u0430 - \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u0431\u0435\u0434\u0438\u043b     s &lt;&lt; Fig() &lt;&lt; &quot; winner (compiler)&quot; &lt;&lt; std::endl;   } } <\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0438 \u043f\u0430\u0440\u0442\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 (\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u0446\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 fas::empty_list \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c ):  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Pos, typename F, typename S, typename Tail&gt; std::ostream& operator&lt;&lt;(std::ostream& s   ,fas::type_list&lt;fas::tuple&lt; Pos, F, S&gt;, Tail&gt;)  {   s &lt;&lt; fas::tuple&lt;Pos, F, S&gt;() &lt;&lt; std::endl;   s &lt;&lt; Tail(); } <\/code><\/pre>\n<p>  \u041d\u0443 \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435. \u041a\u0430\u0436\u0434\u044b\u0439 \u0445\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f game:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename R, typename Level, typename Board&gt; struct game; <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c R \u2014 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438, Level \u2014 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, Board \u2014 \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0434\u043e\u0441\u043a\u0430 \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u0438\u0437 \u0434\u0435\u0432\u044f\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 (\u0444\u0438\u0433\u0443\u0440). \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0438\u0433\u0440\u044b, \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e \u0432\u044b\u0448\u0435, \u043a\u043e\u0440\u0442\u0435\u0436 \u0438\u0437 \u0442\u0440\u0435\u0445 \u0442\u0438\u043f\u043e\u0432: \u043f\u043e\u0437\u0438\u0446\u0438\u044f, \u0435\u0441\u043b\u0438 \u0445\u043e\u0434 \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d ( -1 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435), \u0444\u0438\u0433\u0443\u0440\u0430 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044f (e \u2014 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442), \u043d\u043e\u0432\u0430\u044f \u0434\u043e\u0441\u043a\u0430 \u0441 \u0445\u043e\u0434\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 (empty_list \u0435\u0441\u043b\u0438 \u0445\u043e\u0434 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d). <\/p>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:  <\/p>\n<ol>\n<li>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0444\u0438\u0433\u0443\u0440\u0443 (\u0447\u0435\u0439 \u0445\u043e\u0434)<\/li>\n<li>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u2014 \u044d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440: [\u043f\u043e\u0437\u0438\u0446\u0438\u044f, \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c]<\/li>\n<li>\u0412 \u0433\u043e\u043b\u043e\u0432\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u0439 \u0445\u043e\u0434, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0435\u0433\u043e<\/li>\n<li>\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044f<\/li>\n<li>\u0414\u0435\u043b\u0430\u0435\u043c \u0445\u043e\u0434<\/li>\n<li>\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 (\u043a\u043e\u0440\u0442\u0435\u0436 \u0438\u0437 \u0442\u0440\u0435\u0445 \u0442\u0438\u043f\u043e\u0432)<\/li>\n<\/ol>\n<p>  <\/p>\n<pre><code class=\"cpp\">template&lt;typename R, typename Level, typename Board&gt; struct game {   typedef typename figure&lt;Board&gt;::type fig;   typedef typename available_moves&lt;R, Level, fig, Board&gt;::type moves;   typedef typename fas::head&lt;moves&gt;::type result_move;   typedef typename fas::first&lt;result_move&gt;::type position;   typedef typename fas::second&lt;result_move&gt;::type win_fig;   typedef typename do_move&lt;position, fig, Board&gt;::type board;    typedef fas::tuple&lt; position, win_fig, board &gt; type; }; <\/code><\/pre>\n<p>  \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u0435\u0439 \u0445\u043e\u0434 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u043e\u0441\u043a\u0435, \u043f\u0440\u043e\u0441\u0442\u043e: \u0435\u0441\u043b\u0438 \u043f\u0443\u0441\u0442\u044b\u0445 \u043a\u043b\u0435\u0442\u043e\u043a \u043d\u0435\u0447\u0435\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0442\u043e \u0445\u043e\u0434 \u043a\u0440\u0435\u0441\u0442\u0438\u043a\u043e\u0432, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u043d\u043e\u043b\u0438\u043a\u043e\u0432:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Board&gt; struct figure {   typedef typename fas::if_c&lt;     fas::type_count&lt; e, Board&gt;::value % 2 == 1,      x,      o   &gt;::type type; }; <\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u0434\u043e\u0441\u043a\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c, \u0447\u0442\u043e \u0445\u043e\u0434 \u043d\u043e\u043b\u0438\u043a\u043e\u0432, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u0442.\u043a. \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u0442\u0438\u043f. <\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432 (available_moves) \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440: [\u043f\u043e\u0437\u0438\u0446\u0438\u044f, \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c], \u043f\u0440\u0438\u0447\u0435\u043c \u0438\u043c\u0435\u044e\u0449\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u043b\u043e\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u2014 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0445\u043e\u0434. \u0415\u0441\u043b\u0438 \u0445\u043e\u0434 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d, \u0442\u043e \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u0440\u0430 \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 -1. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438:  <\/p>\n<ul>\n<li> [-1,e] \u2014 \u0445\u043e\u0434 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d(\u0434\u043e\u0441\u043a\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0430), \u043b\u0438\u0431\u043e \u0445\u043e\u0434 \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d, \u043d\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 (\u0434\u043e\u0441\u0440\u043e\u0447\u043d\u0430\u044f \u043d\u0438\u0447\u044c\u044f) <\/li>\n<li> [-1,x] \u2014 \u0445\u043e\u0434 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d, \u043f\u043e\u0431\u0435\u0434\u0430 \u043a\u0440\u0435\u0441\u0442\u0438\u043a\u043e\u0432 <\/li>\n<li> [N,e] \u2014 \u0445\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u044e N <\/li>\n<li> [N,x] \u2014 \u0445\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0438 \u043e\u043d \u043f\u043e\u0431\u0435\u0434\u0438\u043b (\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438\u0433\u0440\u0430\u0435\u0442 \u0437\u0430 \u043a\u0440\u0435\u0441\u0442\u0438\u043a\u0438)<\/li>\n<\/ul>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f available_moves \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0440\u044f\u0434 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u0430\u0436\u0434\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0430\u0440 \u0438\u043b\u0438 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a:  <\/p>\n<ol>\n<li> winner_list \u2014 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u043e\u0441\u043a\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 [-1,x]. \u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438\u043b\u0438 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a <\/li>\n<li> winning_moves \u2014 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u043e\u0441\u043a\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044f, \u043a\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0445\u043e\u0434 \u0438 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 [4,o]. \u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0430\u0440 \u0438\u043b\u0438 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a <\/li>\n<li> blocking_moves \u2014 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u043e\u0441\u043a\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043a\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0445\u043e\u0434 \u0438 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u043e\u0431\u0435\u0434\u0443 \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 [7,x]. \u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0430\u0440 \u0438\u043b\u0438 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a <\/li>\n<li> draw_list \u2014 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u043e\u0441\u043a\u0435 \u043d\u0438\u0447\u044c\u044f [-1,e] \u0438\u043b\u0438 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a <\/li>\n<li> \u0425\u043e\u0434 \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 [3,e]. \u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0430\u0440 \u0438\u043b\u0438 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a <\/li>\n<\/ol>\n<p>  \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0432 \u044d\u0442\u0438 \u0441\u043f\u0438\u0441\u043a\u0438, \u0432 \u0442\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0445\u043e\u0434\u043e\u0432 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430:  <\/p>\n<pre><code class=\"cpp\">template&lt;   typename R,   typename Level,   typename Fig,    typename Board &gt; struct available_moves {   typedef typename fas::type_list_n&lt;     typename winner_list&lt; Fig, Board &gt;::type,      typename winning_moves&lt; Fig, Board &gt;::type,      typename blocking_moves&lt; Fig, Board &gt;::type,      typename draw_list&lt; Board &gt;::type,      typename free_moves&lt;R, Level, Board &gt;::type   &gt;::type type; }; <\/code><\/pre>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0435\u0440\u0432\u044b\u0435 \u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: winner_list, winning_moves \u0438 blocking_moves. \u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0442\u0440\u0435\u0445 \u043f\u0430\u0440 [\u043f\u043e\u0437\u0438\u0446\u0438\u044f, \u0444\u0438\u0433\u0443\u0440\u0430]. \u0422\u0430\u043a\u0438\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0432\u043e\u0441\u0435\u043c\u044c: \u0442\u0440\u0438 \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438, \u0442\u0440\u0438 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438 \u0438 \u0434\u0432\u0430 \u043f\u043e \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0434\u043e\u0441\u043a\u0438:  <\/p>\n<pre><code class=\"cpp\">x - - 0 x - - - 0 <\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0438:  <\/p>\n<pre><code class=\"cpp\">[[0,e],[1,e],[2,e]] [[3,e],[4,e],[5,e]] [[6,e],[7,e],[8,e]] [[0,e],[3,e],[6,e]] [[1,e],[4,e],[7,e]] [[2,e],[5,e],[8,e]] [[0,e],[4,e],[8,e]] [[2,e],[4,e],[6,e]] <\/code><\/pre>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0447\u0442\u043e \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename, typename PairList3&gt; struct winner_line {   typedef typename fas::switch_&lt;     fas::case_c&lt;        is_win_line&lt;x, PairList3&gt;::value,        fas::pair&lt; fas::int_&lt;-1&gt;, x&gt;      &gt;,      fas::case_c&lt;        is_win_line&lt;o, PairList3&gt;::value,        fas::pair&lt; fas::int_&lt;-1&gt;, o&gt;      &gt;,     fas::default_&lt; fas::empty_list &gt;   &gt;::type type; }; <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043b\u0438\u043d\u0438\u044f \u0438\u0437 \u043a\u0440\u0435\u0441\u0442\u0438\u043a\u043e\u0432 (is_win_line&lt;x, PairList3&gt;), \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c [-1,x] \u2014 \u0445\u043e\u0434 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d, \u0442.\u043a. \u043a\u0440\u0435\u0441\u0442\u0438\u043a\u0438 \u043f\u043e\u0431\u0435\u0434\u0438\u043b\u0438, \u0435\u0441\u043b\u0438 \u043b\u0438\u043d\u0438\u044f \u0438\u0437 \u043d\u043e\u043b\u0438\u043a\u043e\u0432, \u0442\u043e [-1,o]. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. <\/p>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u0442\u043e \u043b\u0438\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u0434\u043d\u0438\u0445 \u0438 \u0442\u0435\u0445 \u0436\u0435 \u0444\u0438\u0433\u0443\u0440, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0445 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Fig, typename PairList3&gt; struct is_win_line {   enum {     value = fas::count_if&lt;        PairList3 ,        fas::same_type&lt; Fig, fas::second&lt;fas::_1&gt; &gt;      &gt;::value == 3   }; }; <\/code><\/pre>\n<p>  \u0421 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u0431\u0435\u0434\u043d\u043e\u0439 \u0438\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 (\u043a\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0445\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u043e\u0431\u0435\u0434\u0443 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430) \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u043a\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Fig, typename PairList3&gt; struct has_win_pos {   enum {     value =           fas::count_if&lt;             PairList3 ,             fas::same_type&lt; e,   fas::second&lt;fas::_1&gt; &gt;            &gt;::value == 1       && fas::count_if&lt;             PairList3 ,             fas::same_type&lt; Fig, fas::second&lt;fas::_1&gt; &gt;            &gt;::value == 2   }; }; <\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 value \u043f\u0440\u0438\u043c\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 1, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0430 \u043f\u0443\u0441\u0442\u0430\u044f \u043a\u043b\u0435\u0442\u043a\u0430, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0435 \u0437\u0430\u043d\u044f\u0442\u044b \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0438\u0433\u0443\u0440\u043e\u0439. <\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u043f\u0430\u0440\u044b, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0442\u043e\u0440\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u0431\u0443\u0434\u0435\u0442 e, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u043f\u043e\u0431\u0435\u0434\u043d\u044b\u0439 \u0445\u043e\u0434 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0438 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Fig, typename PairList3 &gt; struct win_helper {   typedef typename fas::if_c&lt;     has_win_pos&lt; Fig, PairList3 &gt;::value,      typename fas::select&lt;        PairList3,        fas::same_type&lt; fas::second&lt;fas::_1&gt;, e&gt;      &gt;::type,      fas::empty_list   &gt;::type type; }; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u043b\u0438\u043d\u0438\u0438, \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0444\u0438\u0433\u0443\u0440\u0443 (\u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u0440\u0435\u0441\u0442\u0438\u043a \u0432 \u043d\u043e\u043b\u0438\u043a \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442) \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f win_helper:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Fig, typename PairList3 &gt; struct blocking_move {   typedef typename fas::if_&lt;     fas::same_type&lt;Fig, x&gt;,      o,      x   &gt;::type rev_fig;    typedef typename win_helper&lt; rev_fig, PairList3 &gt;::type type; }; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0431\u0435\u0434\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0444\u0438\u0433\u0443\u0440\u0443 \u043d\u0435 \u043d\u0430\u0434\u043e, \u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0438\u043f \u0438\u0437 \u043f\u0430\u0440\u044b (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0442\u043e \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u0438 \u0442\u0438\u043f\u043e\u043c e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 [8,e]) \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0444\u0438\u0433\u0443\u0440\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c transform:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Fig, typename PairList3&gt; struct winning_move {   typedef typename fas::transform&lt;     typename win_helper&lt; Fig, PairList3 &gt;::type,      fas::pair&lt; fas::first&lt;fas::_1&gt;, Fig &gt;    &gt;::type type; }; <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c win_helper \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0442\u043e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 win_helper \u0432\u0435\u0440\u043d\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 [[4,e]] \u0438, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0438\u043f e \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0444\u0438\u0433\u0443\u0440\u0443 (Fig). \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e win_helper \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 fas::if_.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0441 \u043b\u0438\u043d\u0438\u044f\u043c\u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c, \u0434\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0434\u043d\u0443, \u043d\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0443\u044e:  <\/p>\n<pre><code class=\"cpp\">template&lt;   template&lt;typename, typename&gt; class Move,    typename Fig,    typename Board,    int P0, int P1, int P2 &gt; struct move_t {   typedef typename fas::type_list_n&lt;     fas::pair&lt; fas::int_&lt;P0&gt;, typename fas::type_at_c&lt;P0, Board&gt;::type &gt;,      fas::pair&lt; fas::int_&lt;P1&gt;, typename fas::type_at_c&lt;P1, Board&gt;::type &gt;,      fas::pair&lt; fas::int_&lt;P2&gt;, typename fas::type_at_c&lt;P2, Board&gt;::type &gt;   &gt;::type pos_list;    typedef typename Move&lt;Fig, pos_list&gt;::type type; }; <\/code><\/pre>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c Move \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (winner_line, blocking_move \u0438\u043b\u0438 winning_move). \u0424\u0443\u043d\u043a\u0446\u0438\u044f move_t \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0442\u0440\u0435\u0445 \u043f\u0430\u0440 [\u043f\u043e\u0437\u0438\u0446\u0438\u044f, \u0444\u0438\u0433\u0443\u0440\u0430], \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0440\u0435\u0445 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 P0, P1 \u0438 P2 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0438\u0445 \u0432 Move. <br \/>  \u0412\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u044f\u0432\u043d\u043e:  <\/p>\n<pre><code class=\"cpp\">template&lt;   template&lt;typename, typename&gt; class Move,    typename Fig,    typename Board &gt; struct moves_list_t {   typedef typename fas::type_list_n &lt;     typename move_t&lt; Move, Fig, Board, 0, 1, 2 &gt;::type,     typename move_t&lt; Move, Fig, Board, 3, 4, 5 &gt;::type,      typename move_t&lt; Move, Fig, Board, 6, 7, 8 &gt;::type,        typename move_t&lt; Move, Fig, Board, 0, 3, 6 &gt;::type,     typename move_t&lt; Move, Fig, Board, 1, 4, 7 &gt;::type,      typename move_t&lt; Move, Fig, Board, 2, 5, 8 &gt;::type,       typename move_t&lt; Move, Fig, Board, 0, 4, 8 &gt;::type,      typename move_t&lt; Move, Fig, Board, 2, 4, 6 &gt;::type    &gt;::type type; }; <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432 (\u043f\u043e\u0431\u0435\u0434\u043d\u044b\u0445 \u0438\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0445) \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u0423\u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Fig, typename Board&gt; struct winner_list   : moves_list_t&lt; winner_line,  Fig, Board&gt; {}; <\/code><\/pre>\n<p>  \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0431\u0435\u0434\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Fig, typename Board&gt; struct winning_moves   : moves_list_t&lt; winning_move,  Fig, Board&gt; {}; <\/code><\/pre>\n<p>  \u0421\u043f\u0438\u0441\u043e\u043a \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0445\u043e\u0434\u043e\u0432:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Fig, typename Board&gt; struct blocking_moves   : moves_list_t&lt; blocking_move,  Fig, Board&gt; {}; <\/code><\/pre>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438 \u0442\u0440\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432 (winner_line, blocking_move \u0438\u043b\u0438 winning_move), \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0435\u0449\u0435 \u0434\u0432\u0435. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0438\u0447\u044c\u0435\u0439. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0438\u0447\u044c\u044e \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u0435\u0441\u043b\u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u043a\u043b\u0435\u0442\u043e\u043a \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u0440\u0435\u0445, \u0442\u043e \u044d\u0442\u043e \u043d\u0438\u0447\u044c\u044f. \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0435 \u0432\u0435\u0440\u043d\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u043b\u043e\u0432\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (winner_line, blocking_move \u0438\u043b\u0438 winning_move) \u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043f\u0443\u0441\u0442\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438, \u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0438\u0447\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u043d\u044c\u0448\u0435, \u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439.  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Board&gt; struct draw_list {   typedef typename fas::if_c&lt;     fas::type_count&lt; e, Board &gt;::value &lt; 3,      fas::pair&lt; fas::int_&lt;-1&gt;, e &gt;,      fas::empty_list   &gt;::type type; }; <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u0443\u0441\u0442\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u0440\u0435\u0445, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u0430\u0440\u0443 [-1,e] \u2014 \u0445\u043e\u0434 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d, \u043d\u0438\u0447\u044c\u044f. <\/p>\n<p>  \u041d\u0443 \u0430 \u0442\u0435\u043f\u0435\u0440\u044c, \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0441\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u2014 \u0445\u043e\u0434 \u0432 \u043b\u044e\u0431\u0443\u044e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e. \u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u044b \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 (\u0443\u0436 \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435 \u0437\u0430 \u043a\u0430\u043b\u0430\u043c\u0431\u0443\u0440) \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0435\u043b\u0430\u0435\u043c \u201c\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0445\u043e\u0434\u044b\u201d, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. <\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044e free_moves \u0440\u0430\u0437\u043e\u0431\u044c\u0435\u043c \u043d\u0430 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430. \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c, \u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u0437\u0430\u043d\u044f\u0442\u044b\u0445 \u043f\u043e\u043b\u0435\u0439, \u0432\u044b\u0434\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432, \u043f\u0440\u0438\u0447\u0435\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u0435 \u0445\u043e\u0434\u044b \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0441\u043f\u0438\u0441\u043a\u0430. \u041d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440 [\u043f\u043e\u0437\u0438\u0446\u0438\u044f, \u0444\u0438\u0433\u0443\u0440\u0430] \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0435 \u043f\u0430\u0440\u044b, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0444\u0438\u0433\u0443\u0440\u0430 \u043d\u0435 \u0440\u0430\u0432\u043d\u0430 e (\u0437\u0430\u043d\u044f\u0442\u044b\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438).<\/p>\n<p>  \u0414\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0445\u043e\u0434\u043e\u0432 \u043d\u0430 \u043f\u0443\u0441\u0442\u043e\u0439 \u0434\u043e\u0441\u043a\u0435 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u00ae \u0438 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename R, typename Level&gt; struct priority_positions; <\/code><\/pre>\n<p>  \u041d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u0442\u0438\u043f\u0430:  <\/p>\n<ol>\n<li>\u0426\u0435\u043d\u0442\u0440 (\u043f\u043e\u0437\u0438\u0446\u0438\u044f 4)<\/li>\n<li>\u0421\u043f\u0438\u0441\u043e\u043a \u0443\u0433\u043b\u043e\u0432 ([0,2,6,8])<\/li>\n<li>\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 ([1,3,5,7])<\/li>\n<\/ol>\n<p>  <\/p>\n<pre><code class=\"cpp\">typedef fas::int_&lt;4&gt; center;  typedef fas::type_list_n&lt;    fas::int_&lt;0&gt;, fas::int_&lt;2&gt;,    fas::int_&lt;6&gt;, fas::int_&lt;8&gt;  &gt;::type corner_list;  typedef fas::type_list_n&lt;    fas::int_&lt;1&gt;, fas::int_&lt;3&gt;,    fas::int_&lt;5&gt;, fas::int_&lt;7&gt;  &gt;::type edge_list; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438 corner_list \u0438 edge_list \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0441 \u0446\u0435\u043d\u0442\u0440\u043e\u043c:  <\/p>\n<pre><code class=\"cpp\">typedef typename fas::merge&lt;   center,    typename fas::merge&lt;     typename fas::random_shuffle&lt; R, corner_list&gt;::type,      typename fas::random_shuffle&lt; R, side_list&gt;::type   &gt;::type &gt;::type level2_list; <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u044b \u0445\u043e\u0434\u043e\u0432: \u0446\u0435\u043d\u0442\u0440, \u0443\u0433\u043e\u043b, \u043a\u0440\u0430\u0439\u043d\u0438\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e fas::merge \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u201c\u043f\u043b\u043e\u0441\u043a\u0438\u0439\u201d fas::type_list_n.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 random_shuffle?<\/b><\/p>\n<div class=\"spoiler_text\">\u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u044d\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438, \u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0430\u0441 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0442\u043e, \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043a\u0438 \u0442\u0438\u043f\u043e\u0432. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432:  <\/p>\n<pre><code>[A,B,C,D] <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0430\u043a\u043e\u0439-\u0436\u0435 \u0434\u043b\u0438\u043d\u044b \u0438\u0437 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code>[10,2,44,7] <\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044d\u0442\u0438 \u0434\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440:  <\/p>\n<pre><code>[[10,A],[2,B],[44,C],[7,D]] <\/code><\/pre>\n<p>  \u041e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u044b:  <\/p>\n<pre><code class=\"cpp\">[[2,B],[7,D],[10,A],[44,C]] <\/code><\/pre>\n<p>  \u0418 \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0438\u043f \u0438\u0437 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u044b:   <\/p>\n<pre><code class=\"cpp\">[B,D,A,C] <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0438\u043f \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0440\u0443\u0433\u043e\u0439. \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430:  <\/p>\n<pre><code class=\"cpp\">typedef fas::generator&lt;    fas::int_&lt;1&gt;,    fas::inc&lt; fas::_ &gt;  &gt;::next_type result; \/\/ fas::int_&lt;2&gt; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430:  <\/p>\n<pre><code class=\"cpp\">typedef fas::generator&lt;    fas::int_&lt;1&gt;,    fas::rand&lt; fas::_&gt;  &gt;::next_type result; \/\/ fas::int_&lt;12461757&gt; <\/code><\/pre>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c fas::generate \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440. \u0414\u0430\u043b\u0435\u0435 fas::random_shuffle \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c fas::shuffle, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f fas::transform2), \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e, \u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0438\u043f \u0438\u0437 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u044b (fas::transform). <\/p>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c fas::random_shuffle, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0437\u0435\u0440\u043d\u0443 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 fas::shuffle \u2014 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e. \u0423\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f fas::random_shuffle:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename R, typename L&gt; struct random_shuffle {   typedef typename generate_c&lt;      length&lt;L&gt;::value,     generator_t&lt;rand&lt;R&gt;, rand &gt;   &gt;::type rand_list;    typedef typename shuffle&lt; L, rand_list&gt;::type type; }; <\/code><\/pre>\n<p>  \u0418 fas::shuffle:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename L, typename RL&gt; struct shuffle {   typedef typename transform2_t&lt; RL, L, make_pair &gt;::type pair_list;      typedef typename sort&lt;     pair_list,      less&lt;       first&lt;_1&gt;,       first&lt;_2&gt;      &gt;    &gt;::type sorted_list;      typedef typename transform_t&lt; sorted_list, second &gt;::type type; }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u043c \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f:  <\/p>\n<pre><code class=\"cpp\">typedef typename fas::random_shuffle&lt; R, level2_list &gt;::type level0_list; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438 \u0443\u0433\u043b\u043e\u0432 \u0438 \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0432 \u043e\u0434\u0438\u043d \u0441\u043f\u0438\u0441\u043e\u043a, \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u0442\u044c \u0435\u0433\u043e, \u0438 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e:  <\/p>\n<pre><code class=\"cpp\">typedef typename fas::merge&lt; corner_list, edge_list &gt;::type side_list; typedef typename fas::merge&lt;   center,    typename fas::random_shuffle&lt; R, side_list&gt;::type &gt;::type level1_list; <\/code><\/pre>\n<p>  \u0418\u0442\u0430\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0442\u0440\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0445\u043e\u0434\u043e\u0432, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a:  <\/p>\n<pre><code class=\"cpp\">typedef typename fas::switch_&lt;   fas::case_c&lt; Level::value == 0, level0_list &gt;,    fas::case_c&lt; Level::value == 1, level1_list &gt;,    fas::default_&lt; level2_list &gt; &gt;::type type; <\/code><\/pre>\n<p>  \u0418\u0442\u043e\u0433\u043e:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename R, typename Level&gt; struct priority_positions {   typedef fas::int_&lt;4&gt; center;    typedef fas::type_list_n&lt;      fas::int_&lt;0&gt;, fas::int_&lt;2&gt;,      fas::int_&lt;6&gt;, fas::int_&lt;8&gt;    &gt;::type corner_list;      typedef fas::type_list_n&lt;      fas::int_&lt;1&gt;, fas::int_&lt;3&gt;,      fas::int_&lt;5&gt;, fas::int_&lt;7&gt;    &gt;::type edge_list;      typedef typename fas::merge&lt; corner_list, edge_list &gt;::type side_list;      typedef typename fas::merge&lt;     center,      typename fas::merge&lt;       typename fas::random_shuffle&lt; R, corner_list&gt;::type,        typename fas::random_shuffle&lt; R, side_list&gt;::type     &gt;::type   &gt;::type level2_list;    typedef typename fas::merge&lt;     center,      typename fas::random_shuffle&lt; R, side_list&gt;::type   &gt;::type level1_list;    typedef typename fas::random_shuffle&lt; R, level2_list &gt;::type level0_list;    typedef typename fas::switch_&lt;     fas::case_c&lt; Level::value == 0, level0_list &gt;,      fas::case_c&lt; Level::value == 1, level1_list &gt;,      fas::default_&lt; level2_list &gt;   &gt;::type type; }; <\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 priority_positions \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u2014 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 free_moves \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440, \u0432 \u0432\u0438\u0434\u0435 [N,e], \u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a:  <\/p>\n<pre><code class=\"cpp\">  typedef typename fas::transform  &lt;     typename priority_positions&lt; R, Level &gt;::type,     fas::pair&lt;       fas::_1,        fas::type_at&lt; fas::_1, Board&gt;     &gt;   &gt;::type pair_list; <\/code><\/pre>\n<p>  \u0418 \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438:  <\/p>\n<pre><code class=\"cpp\">  typedef typename fas::select&lt;     pair_list,      fas::same_type&lt;        e,        fas::second&lt;fas::_&gt;     &gt;   &gt;::type type; <\/code><\/pre>\n<p>  \u0418\u0442\u0430\u043a, \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u0445\u043e\u0434 \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438:  <\/p>\n<pre><code class=\"cpp\">template&lt;typename R, typename Level, typename Board&gt; struct free_moves {   typedef typename fas::transform&lt;     typename priority_positions&lt; R, Level &gt;::type,     fas::pair&lt;       fas::_1,        fas::type_at&lt; fas::_1, Board&gt;     &gt;   &gt;::type pair_list;    typedef typename fas::select&lt;     pair_list,      fas::same_type&lt;        e,        fas::second&lt;fas::_&gt;     &gt;   &gt;::type type; }; <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0443\u043d\u043a\u0442 \u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 game \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0445\u043e\u0434. \u0415\u0441\u043b\u0438 \u0445\u043e\u0434 \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d, \u0442\u043e \u0437\u0430\u043c\u0435\u0449\u0430\u0435\u043c \u0442\u0438\u043f e, \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0444\u0438\u0433\u0443\u0440\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0434\u0435\u043b\u0430\u043b \u0445\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a (\u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0445\u043e\u0434, \u0442\u043e \u0434\u043e\u0441\u043a\u0443 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u043d\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u043c):  <\/p>\n<pre><code class=\"cpp\">template&lt;typename Pos, typename Fig,  typename Board&gt; struct do_move {   typedef typename set_at&lt; Pos, Fig, Board &gt;::type type; };  template&lt;typename Fig,  typename Board&gt; struct do_move&lt; fas::int_&lt;-1&gt;, Fig, Board&gt; {   typedef fas::empty_list type; }; <\/code><\/pre>\n<p>  \u0423\u0444\u0444\u0444. \u0412\u0440\u043e\u0434\u0435, \u0432\u0441\u0435. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430:  <\/p>\n<pre><code class=\"cpp\">#include &quot;tictactoe.hpp&quot; #include &quot;types.hpp&quot; #include &quot;show_board.hpp&quot; #include &lt;iostream&gt;  int main() {   typedef game&lt; initial_rand, level, board &gt;::type result;   std::cout &lt;&lt; result() ;   return 0; } <\/code><\/pre>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0445\u043e\u0434 \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0434\u043e\u0441\u043a\u0435. \u0410 \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0445\u043e\u0434, \u0442\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0438\u0433\u0440\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u0438\u044e \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0441 \u0441\u0430\u043c\u0438\u043c \u0441\u043e\u0431\u043e\u0439 \u2014 \u0434\u0435\u043b\u043e \u0442\u0435\u0445\u043d\u0438\u043a\u0438.<\/p>\n<h4>\u041a\u0440\u0435\u0441\u0442\u0438\u043a\u0438-\u043d\u043e\u043b\u0438\u043a\u0438. \u041f\u0430\u0440\u0442\u0438\u044f<\/h4>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0446\u0438\u043a\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c game, \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u044b\u044f\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c \u0438\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0447\u044c\u044f. \u0418\u0437\u0443\u0447\u0430\u0442\u044c \u0446\u0438\u043a\u043b\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u0430. \u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f (\u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a):  <\/p>\n<pre><code class=\"cpp\">int factorial(int n) {    return n &gt; 0 ? n * factorial(n - 1) : 1; } <\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438:  <\/p>\n<pre><code class=\"cpp\">template&lt;int N&gt; struct factorial { enum { value = N * factorial&lt;N-1&gt;::value }; };  template&lt;&gt; struct factorial&lt;1&gt; { enum { value = 1 };}; <\/code><\/pre>\n<p>  \u0412 \u0446\u0438\u043a\u043b\u0435:  <\/p>\n<pre><code class=\"cpp\">int factorial(int i) {   int result = 1;   for ( ; i &gt; 0; result*=i, --i);   return result; } <\/code><\/pre>\n<p>  \u041d\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">int i=0; for (; i&lt;10;i++); std::cout &lt;&lt; i &lt;&lt; std::endl; <\/code><\/pre>\n<p>  \u0421 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c fas::for_:  <\/p>\n<pre><code class=\"cpp\">typedef fas::for_&lt;    fas::int_&lt;0&gt;,    fas::less&lt;fas::_, fas::int_&lt;10&gt; &gt;,   fas::inc&lt;fas::_&gt;  &gt;::type result; std::cout &lt;&lt; result::value &lt;&lt; std::endl; <\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0443 for \u0443 fas::for_ \u0442\u0440\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430: \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0438\u043f, \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0438\u043f \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u0435\u0441\u0442\u044c, \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e, \u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0438\u0441\u0442\u0438\u043d\u043d\u043e, \u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u0414\u0430\u043b\u0435\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u0430 \u0432\u0445\u043e\u0434 \u0443\u0441\u043b\u043e\u0432\u0438\u044e, \u043f\u043e\u0441\u043b\u0435 \u043e\u043f\u044f\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0442.\u0434. \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435. \u0415\u0441\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0438 \u0440\u0430\u0437\u0443, \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0438\u043f. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0446\u0438\u043a\u043b\u0430 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430 \u0442\u0438\u043f\u043e\u0432 \u2014 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:   <\/p>\n<pre><code class=\"cpp\">template&lt;int I&gt; struct factorial {   typedef typename fas::for_&lt;     \/\/ \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0438\u043f     fas::pair&lt;       fas::int_&lt;I&gt;,  \/\/ \u0441\u0447\u0435\u0442\u0447\u0438\u043a        fas::int_&lt;1&gt;   \/\/ \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435     &gt;,     \/\/ \u0443\u0441\u043b\u043e\u0432\u0438\u0435 (\u043f\u043e\u043a\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0443\u043b\u044f)     fas::greater&lt; fas::first&lt; _1 &gt;, int_&lt;0&gt; &gt;,     \/\/ \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 (\u0434\u0435\u043a\u0440\u0438\u043c\u0435\u043d\u0442 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0438 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a)     fas::pair&lt;       fas::dec&lt; fas::first&lt; _1 &gt; &gt;,       fas::times&lt; fas::second&lt; _1 &gt;, fas::first&lt; _1 &gt; &gt;     &gt;   &gt;::type result;     \/\/ \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0430\u0440\u0430: \u0441\u0447\u0435\u0442\u0447\u0438\u043a (\u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e) \u0438 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b   typedef typename fas::second&lt;result&gt;::type type; \/\/ int_&lt; I! &gt;   enum { value = type::value}; }; <\/code><\/pre>\n<p>  \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0446\u0438\u043a\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0442\u0438\u044e \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 (\u043d\u0438\u0447\u044c\u044f \u0438\u043b\u0438 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c). \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0446\u0438\u043a\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0440\u043d\u0435\u0442 game \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b fas::for_ \u0431\u0443\u0434\u0443\u0442 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u0442\u0435\u0436\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0430\u0443\u043d\u0434\u0430 \u0438\u0433\u0440\u044b \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u0445\u043e\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 fas::int_&lt;-1&gt;, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0446 \u0438\u0433\u0440\u044b \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u0446\u0438\u043a\u043b\u0430. \u0418\u0442\u0430\u043a, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0438\u043f:  <\/p>\n<pre><code class=\"cpp\">fas::type_list&lt;    fas::tuple&lt;      fas::empty_type, \/\/ \u0445\u043e\u0434 \u0438\u0433\u0440\u043e\u043a\u0430      e,               \/\/ \u0444\u0438\u0433\u0443\u0440\u0430 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044f     board            \/\/ \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0434\u043e\u0441\u043a\u0430    &gt;  &gt; <\/code><\/pre>\n<p>  \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0446\u0438\u043a\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0434\u0430\u0436\u0435 \u043d\u0430 \u0434\u043e\u0441\u043a\u0435, \u0433\u0434\u0435 \u043d\u0435\u0442 \u0445\u043e\u0434\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0433\u043e\u043b\u043e\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0440\u0442\u0435\u0436, \u043d\u0435 \u0432\u0430\u0436\u043d\u0430 \u2014 \u043c\u044b \u0435\u0435 \u043e\u0442\u0440\u0435\u0436\u0435\u043c.<\/p>\n<p>  \u0423\u0441\u043b\u043e\u0432\u0438\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u0446\u0438\u043a\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0442\u0438\u043f \u043a\u043e\u0440\u0442\u0435\u0436\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432 \u0445\u0432\u043e\u0441\u0442\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0445\u043e\u0434\u043e\u0432, \u0440\u0430\u0432\u043d\u044b\u0439 fas::int_&lt;-1&gt; (\u0445\u043e\u0434 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d) \u0438\u043b\u0438 \u0444\u0438\u0433\u0443\u0440\u0430, \u043d\u0435 \u0440\u0430\u0432\u043d\u0430\u044f e (\u0435\u0441\u0442\u044c \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c):  <\/p>\n<pre><code class=\"cpp\">fas::and_&lt;   fas::not_&lt;     fas::same_type&lt;       fas::int_&lt;-1&gt;,        fas::first&lt; last&lt; fas::_1&gt; &gt;     &gt;   &gt;,    fas::same_type&lt;     e,      fas::second&lt; last&lt; fas::_1&gt; &gt;   &gt;  &gt; <\/code><\/pre>\n<p>  \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0445\u0432\u043e\u0441\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0443\u043d\u0434\u0430 \u0438\u0433\u0440\u044b:  <\/p>\n<pre><code class=\"cpp\">fas::push_back&lt;     game&lt;       initial_rand, \/\/ \u201c\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435\u201d \u0447\u0438\u0441\u043b\u043e      level,        \/\/ \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438      fas::third&lt; last&lt; fas::_1&gt; &gt; \/\/ \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0440\u0430\u0443\u043d\u0434\u0430                                    \/\/ (\u0442\u0440\u0435\u0442\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043a\u043e\u0440\u0442\u0435\u0436\u0430)    &gt;,     fas::_1 \/\/ \u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0438\u0433\u0440 &gt; <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0440\u0435\u0437\u0430\u0442\u044c \u0433\u043e\u043b\u043e\u0432\u0443 \u0441\u043f\u0438\u0441\u043a\u0430, \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u0434\u043e\u0441\u043a\u0443 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u0441\u0435\u0445 \u0440\u0430\u0443\u043d\u0434\u043e\u0432 \u0438\u0433\u0440\u044b (\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f &lt;&lt; \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0440\u0430\u0443\u043d\u0434\u043e\u0432 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c):  <\/p>\n<pre><code class=\"cpp\">#include &quot;show_board.hpp&quot; #include &quot;tictactoe.hpp&quot; #include &quot;types.hpp&quot;  int main() {   typedef fas::for_&lt;     fas::type_list&lt;        fas::tuple&lt;          fas::empty_type,          e,         board       &gt;      &gt;,      fas::and_&lt;       fas::not_&lt;         fas::same_type&lt;           fas::int_&lt;-1&gt;,            fas::first&lt; last&lt; fas::_1&gt; &gt;         &gt;       &gt;,        fas::same_type&lt;         e,          fas::second&lt; last&lt; fas::_1&gt; &gt;       &gt;      &gt;,      fas::push_back&lt;        game&lt;          initial_rand,          level,          fas::third&lt; last&lt; fas::_1&gt; &gt;        &gt;,        fas::_1     &gt;   &gt;::type result_list;    typedef fas::tail&lt;result_list&gt;::type game_list;      std::cout &lt;&lt; board() &lt;&lt; std::endl;   std::cout &lt;&lt; game_list() &lt;&lt; std::endl;   return 0; } <\/code><\/pre>\n<p>  <\/p>\n<h4>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u041c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438\u0433\u0440\u0430\u0442\u044c \u0432 \u043a\u0440\u0435\u0441\u0442\u0438\u043a\u0438-\u043d\u043e\u043b\u0438\u043a\u0438, \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u043d\u043e\u0441\u043d\u043e. \u0414\u043b\u044f \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0433\u0440\u044b \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0439 \u0443\u0433\u043e\u043b \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0445\u043e\u0434\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 (\u0435\u0441\u043b\u0438 \u0445\u043e\u0434 \u0431\u044b\u043b \u0441\u0434\u0435\u043b\u0430\u043d \u0432 \u0443\u0433\u043e\u043b), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0438\u043b\u043a\u0443. \u0414\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u0437\u043d\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0445\u043e\u0434 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0445\u043e\u0434 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0443\u0433\u043e\u043b, \u0435\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u043c \u0444\u0438\u0433\u0443\u0440\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430. \u0421 \u0432\u0438\u043b\u043a\u043e\u0439 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u044d\u0442\u0430 \u0442\u0435\u043c\u0430 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441, \u044f \u043e\u043f\u0438\u0448\u0443 \u0435\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u0410 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u044e \u0441 \u043c\u0435\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u2014 \u043e\u043d\u0438 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0442\u0438\u0439 \u043f\u043e\u0434\u0440\u044f\u0434 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 fas::for_ \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043c\u0435\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043c\u0435\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u044f (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043c\u0435\u0442\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430).<\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0430 \u0442\u0435\u043c\u0430 \u044d\u043a\u0441\u0442\u0440\u0435\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u0430-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u043d\u0433\u0430 \u0432 \u043c\u043e\u0435\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438. \u0417\u0434\u0435\u0441\u044c \u0440\u0435\u0447\u044c \u043d\u0435 \u0438\u0434\u0435\u0442 \u043e\u0431 XP. \u042d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u043d\u043e \u043d\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 (\u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e), \u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u0421\u0443\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430. \u041d\u0443\u0436\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0432\u043d\u0435\u0448\u043d\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043b\u0433\u043e, \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0440\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 (\u0447\u0435\u043c \u0434\u043e\u043b\u044c\u0448\u0435, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435), \u043d\u0435 \u0441\u0432\u0430\u043b\u0438\u0432\u0430\u044f\u0441\u044c \u0432   <\/p>\n<pre><code class=\"cpp\">error: template instantiation depth exceeds maximum of 900   <\/code><\/pre>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442 \u043e\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0445 \u0438\u043b\u0438 \u0438\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043e\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432, \u044d\u0442\u043e \u0431\u0435\u0437\u0443\u043c\u043d\u044b\u0435 \u043b\u043e\u0433\u0438 \u043e\u0448\u0438\u0431\u043e\u043a (\u0434\u0435\u0441\u044f\u0442\u043a\u0438, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u0441\u043e\u0442\u043d\u0438 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442), \u0441\u0432\u0430\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0432 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u0441\u0432\u043e\u043f (\u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b) \u0438 Internal Compiler Error. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435 fas::for_, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0442\u0438\u044e \u043a\u0440\u0435\u0441\u0442\u0438\u043a\u043e\u0432-\u043d\u043e\u043b\u0438\u043a\u043e\u0432, \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c board \u043d\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, fas::empty_type, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 128 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u043d\u044b\u0439 \u043b\u043e\u0433 \u043e\u0448\u0438\u0431\u043e\u043a (\u0434\u043b\u044f gcc-4.8).<\/p>\n<p>  \u0412 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0432 \u044f\u0432\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0440\u0435\u0434\u043a\u043e, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c fas::type_list_n \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u0438\u043f\u043e\u0432. \u042d\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 fas\/aop (\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0430\u0441\u043f\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 8 \u043b\u0435\u0442. \u0415\u0441\u043b\u0438 \u044d\u0442\u0430 \u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430, \u0442\u043e \u044f \u043e \u043d\u0435\u0439 \u0442\u043e\u0436\u0435 \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043d\u043e \u044d\u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0446\u0435\u043b\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0441\u0442\u0430\u0442\u0435\u0439. \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/228367\/\"> http:\/\/habrahabr.ru\/post\/228367\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">\n<blockquote><p>&quot;- \u041f\u043e\u0441\u043b\u0435 \u041c\u044f\u0442\u0435\u0436\u0430 \u0413\u0430\u043b\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0421\u043e\u0434\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u043b\u043e\u0436\u0438\u043b\u043e \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 <b>\u043c\u0435\u0442\u0430\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430<\/b>. \u0418 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u044d\u0442\u0438\u043a\u0438; \u0438\u0445 \u0432\u043b\u0430\u0441\u0442\u0438 \u043e\u043f\u0430\u0441\u0430\u044e\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u043d\u0438\u0438 \u0432\u0435\u043b\u0438\u0447\u0438\u044f&#8230;&quot;<br \/>  (<i>\u0438\u0437 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u0432\u044b\u0434\u0430\u0447\u0438 google<\/i>)<\/p><\/blockquote>\n<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0412\u0430\u043c \u0441\u044b\u0433\u0440\u0430\u0442\u044c \u0432 \u043a\u0440\u0435\u0441\u0442\u0438\u043a\u0438-\u043d\u043e\u043b\u0438\u043a\u0438 \u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c. \u0414\u043b\u044f \u0438\u0433\u0440\u044b \u0437\u043d\u0430\u043d\u0438\u044f c++ \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u044f cmake, python \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 c++ ( \u043f\u043e\u0442\u044f\u043d\u0435\u0442 \u0434\u0430\u0436\u0435 \u0442\u0430\u043a\u043e\u0439 \u0434\u0440\u0435\u0432\u043d\u0438\u0439 \u043a\u0430\u043a gcc-3.3 ). Python \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0445\u043e\u0434\u0430, \u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0412\u0441\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f (\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0445\u043e\u0434, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u0442\u0430\u0446\u0438\u0438 \u043d\u0438\u0447\u044c\u0435\u0439) \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0432 run-time \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0432\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-228367","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/228367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=228367"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/228367\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=228367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=228367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=228367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}