{"id":274755,"date":"2016-02-22T22:43:02","date_gmt":"2016-02-22T19:43:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=274755"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=274755","title":{"rendered":"\u0414\u0440\u0443\u0433\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0435\u0442\u0430\u0444\u0443\u043d\u043a\u0446\u0438\u0438 is_function&lt;T&gt; \u0434\u043b\u044f C++98\/03"},"content":{"rendered":"<p>       &nbsp;&nbsp;&nbsp;&nbsp;\u042d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0442\u0447\u0435\u0442 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u0430\u0444\u0443\u043d\u043a\u0446\u0438\u044e is_function \u0434\u043b\u044f \u0421++98\/03, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0417\u0430\u0447\u0435\u043c, \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432\u044b, \u0432 2016 \u0433\u043e\u0434\u0443 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f? \u042f \u043e\u0442\u0432\u0435\u0447\u0443. \u042d\u0442\u043e challenge. \u041a\u0440\u043e\u043c\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u044d\u0442\u0430, \u0441\u043f\u0435\u0440\u0432\u0430 \u0447\u0438\u0441\u0442\u043e \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0438\u0437 \u0440\u0430\u0437\u0440\u044f\u0434\u0430 \u00ab\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u043b\u0438 \u043d\u0435\u0442\u00bb, \u0432\u0441\u043a\u0440\u044b\u043b\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430\u0445. \u0412\u0441\u0435\u0445, \u043a\u043e\u043c\u0443 \u043d\u0435 \u0447\u0443\u0436\u0434\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435, \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c.<br \/>  <a name=\"habracut\"><\/a><br \/>  <a href=\"#intro\">\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/a><br \/>  <a href=\"#theory\">\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438<\/a><br \/>  <a href=\"#impl_0\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u21160<\/a><br \/>  <a href=\"#impl_1\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u21161<\/a><br \/>  <a href=\"#impl_2\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u21162<\/a><br \/>  <a href=\"#final\">\u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/a><\/p>\n<p>  <a name=\"intro\"><\/a><\/p>\n<h2><font color=\"#464646\">\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/font><\/h2>\n<p>  &nbsp;&nbsp;&nbsp;&nbsp;\u041c\u0435\u0442\u0430\u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>is_function&lt;T&gt;<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>true<\/code> \u0435\u0441\u043b\u0438 \u0442\u0438\u043f <code>T<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u043c \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00bb, \u0438 <code>false<\/code>, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442. \u0418\u0442\u0430\u043a, \u043d\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u0430\u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u0438\u043f\u043e\u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0443 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 <a href=\"http:\/\/www.boost.org\/doc\/libs\/1_60_0\/boost\/type_traits\/detail\/is_function_ptr_tester.hpp\">boost<\/a>. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0442\u0430\u043c 25 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430.<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0417\u0430\u0447\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438? \u0412 \u0421++11 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u2014 <i>variadic templates<\/i>. \u041f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043e\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u0437\u0440\u0435\u043b\u043e, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043d\u0430\u0431\u043e\u043b\u0435\u043b\u043e. \u042d\u0442\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0430  <\/p>\n<pre><code class=\"cpp\"> some_template&lt;A1, A2, A3 \/*, etc. *\/&gt;<\/code><\/pre>\n<p>\u043a\u0430\u043a \u0435\u0434\u0438\u043d\u044b\u0439 \u00ab\u043f\u0430\u043a\u0435\u0442\u00bb \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, parameter pack. Parameter pack \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e. \u0418\u043c\u0435\u043d\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0432 \u0421++11 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f is_function. \u0412 \u0421++98\/03 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u00ab\u043d\u0430 \u0432\u0441\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0436\u0438\u0437\u043d\u0438\u00bb. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043a\u0430\u043a <i>variant<\/i> \u0438\u043b\u0438 <i>mpl<\/i> \u0432 boost, \u0442\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c \u0432 \u0438\u0437\u043e\u0431\u0438\u043b\u0438\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 (\u0438\u043d\u043e\u0433\u0434\u0430 \u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c). \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435, \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0442\u0438\u043f <code>T<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>R(A1, A2)<\/code>, \u0442\u043e \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0431\u044b\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e:  <\/p>\n<pre><code class=\"cpp\">\ttemplate &lt;typename F&gt; \tstruct is_function { \/* .... *\/ };  \ttemplate &lt;typename R, typename A1, typename A2&gt; \tstruct is_function&lt;R(A1, A2)&gt; { \/* .... *\/ }; <\/code><\/pre>\n<p>\u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041d\u0435 \u0445\u043e\u0447\u0443 \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u0434\u0443\u043c\u0430\u043b\u0438, \u0431\u0443\u0434\u0442\u043e \u0431\u044b \u044f \u043d\u0435\u0434\u043e\u0432\u043e\u043b\u0435\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0432 boost \u2013 \u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0442\u0430\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041d\u043e \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0432 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e.<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0412 \u043e\u0431\u0449\u0435\u043c, \u044f \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0435\u0445, \u043a\u043e\u043c\u0443 \u043d\u0435 \u043f\u043e\u0432\u0435\u0437\u043b\u043e (\u0445\u043e\u0442\u044f \u044d\u0442\u043e \u043a\u0430\u043a \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c) \u043f\u043e \u0434\u043e\u043b\u0433\u0443 \u0441\u043b\u0443\u0436\u0431\u044b \u0432\u0441\u0435 \u0435\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 C++03. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u044f \u043e\u0437\u0430\u0431\u043e\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u0430\u0441 \u0443\u0434\u0438\u0432\u043b\u044f\u0442\u044c. \u041a\u0442\u043e-\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c: \u00ab\u0434\u0430 \u0434\u0430\u043b\u043e\u0441\u044c \u0442\u0435\u0431\u0435 \u044d\u0442\u043e \u0441\u0442\u0430\u0440\u044c\u0435, \u043d\u0430 \u0434\u0432\u043e\u0440\u0435 2016 \u0433\u043e\u0434!\u00bb. \u0421 \u044d\u0442\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u044c\u0441\u044f, \u043d\u043e \u043a\u0440\u043e\u043c\u0435 \u0447\u0438\u0441\u0442\u043e \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u044f \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u0443. \u0414\u0430 \u0438 \u0434\u0443\u0445 \u0421++03, \u0432 \u0441\u0438\u043b\u0443 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u0447\u0438\u043d, \u0432\u0441\u0435 \u0435\u0449\u0435 \u043d\u0435 \u0443\u0441\u043f\u0435\u043b \u0432\u044b\u0432\u0435\u0442\u0440\u0438\u0442\u044c\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a, just for fun.<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u041f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u043c\u044b \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e, \u0445\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u0442 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <a href=\"http:\/\/en.cppreference.com\/w\/cpp\/language\/sfinae\">SFINAE<\/a> \u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f compile-time \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u0430 \u0442\u0430\u043a\u0436\u0435, \u044f \u043d\u0435 \u0441\u0442\u0430\u043d\u0443 \u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0438 \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430, \u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  <a name=\"theory\"><\/a><\/p>\n<h2><font color=\"#464646\">\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438<\/font><\/h2>\n<p>  &nbsp;&nbsp;&nbsp;&nbsp;\u0415\u0441\u043b\u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u043d\u0430\u0441 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u0442\u043e \u043a\u0430\u043a \u0436\u0435 \u0442\u043e\u0433\u0434\u0430 \u0431\u044b\u0442\u044c? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0430\u0447\u0435. \u041a\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0443 \u0442\u0438\u043f\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u0442 \u0443 \u0434\u0440\u0443\u0433\u0438\u0445? \u041e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 (\u0421++03):<br \/>  <a name=\"4_3_1\"><\/a><b>4.3\/1<\/b>  <\/p>\n<blockquote><p>An lvalue of <i>function type T can be converted to an rvalue of type \u201cpointer to T.\u201d<\/i> The result is a pointer to the function.<\/p><\/blockquote>\n<p>\u0418\u0442\u0430\u043a, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u044f\u0432\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u0422\u0430\u043a\u043e\u0435 \u0436\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0435\u0441\u0442\u044c \u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432: \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0435\u044f\u0432\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0449\u0435:<br \/>  <a name=\"8_3_5_3\"><\/a><b>8.3.5\/3<\/b>  <\/p>\n<blockquote><p>After determining the type of each parameter, <i>any parameter of type<\/i> \u201carray of T\u201d or <i>\u201cfunction returning T\u201d is adjusted to be<\/i> \u201cpointer to T\u201d or <i>\u201cpointer to function returning T,\u201d<\/i> respectively.<\/p><\/blockquote>\n<p>\u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0442\u0438\u043f \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00bb, \u0431\u0443\u0434\u0443\u0447\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u043a\u0430\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u044f\u0432\u043d\u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0430\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e, \u0432 \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444\u0435 <b>13.1<\/b>, \u043e\u043f\u0438\u0441\u0430\u043d\u043e, \u0447\u0442\u043e \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f  <\/p>\n<pre><code class=\"cpp\">\tvoid foo(int ());<\/code><\/pre>\n<p>\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 (\u0442.\u0435. \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435):  <\/p>\n<pre><code class=\"cpp\">\tvoid foo(int (*)());<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u044d\u0442\u043e \u043c\u044b \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0438\u043b\u0438 \u043d\u0435\u0442. \u0412\u043f\u0440\u043e\u0447\u0435\u043c \u0432\u0441\u0435 \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u0430\u043a \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435. \u0410 \u043f\u043e\u043a\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u0442\u0438\u043f\u0435 \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00bb:<br \/>  <a name=\"8_3_4_1\"><\/a><b>8.3.4\/1<\/b>  <\/p>\n<blockquote><p>In a declaration T D where D has the form<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;D1 [ constant-expression<sub>opt<\/sub>]<br \/>  and the type of the identifier in the declaration T D1 is \u201cderived-declarator-type-list T,\u201d then the type of theidentifier of D is an array type. T is called the array element type; <i>this type shall not be a reference type, the (possibly cv-qualified) type void, a function type or an abstract class type.<\/i><\/p><\/blockquote>\n<p>\u0410\u0433\u0430, \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u0422.\u0435. \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00bb. \u041d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 \u044d\u0442\u0438\u043c, \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0441\u044b\u043b\u043e\u043a, \u043c\u0430\u0441\u0441\u0438\u0432 <code>void<\/code> \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0442\u0438\u043f\u0430 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430. \u0415\u0441\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0441\u0435\u0447\u0435\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438, \u0438\u043b\u0438 \u043d\u0435\u0442.<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<i>\u0420\u0435\u0437\u044e\u043c\u0438\u0440\u0443\u0435\u043c. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0422\u0438\u043f \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00bb  <\/p>\n<ul>\n<li>\u043c\u0443\u0442\u0438\u0440\u0443\u0435\u0442 \u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0438\u043f\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/li>\n<li>\u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0442\u0438\u043f\u0430<\/li>\n<\/ul>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\u042d\u0442\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043c\u044b \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0433\u043e.<\/i> <\/p>\n<p>  <a name=\"impl_0\"><\/a><\/p>\n<h2><font color=\"#464646\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u21160, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f<\/font><\/h2>\n<p>  \u042f \u0445\u043e\u0447\u0443 \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0442\u0438\u043f\u0430 \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00bb, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435. \u0420\u0435\u0447\u044c \u043e <a href=\"#8_3_5_3\">8.3.5\/3<\/a>. \u041a\u0440\u0430\u0442\u043a\u043e \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a:<br \/>  \u0415\u0441\u043b\u0438<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<code>void( F ) == void( F * )<\/code>, \u0433\u0434\u0435 <code>F<\/code> \u2013 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0439 \u0442\u0438\u043f<br \/>  , \u0442\u043e <code>F<\/code> \u2013 \u0444\u0443\u043d\u043a\u0446\u0438\u044f. <br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0412\u0441\u0435 \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0432\u0443\u0447\u0438\u0442. \u0418 \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u0442\u043e\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439. \u041f\u0440\u043e\u0441\u0442\u043e\u0439, \u043d\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0439. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0435\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u043e \u0445\u043e\u0447\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u043e\u0434\u043d\u043e\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u0432 \u043d\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434.  <\/p>\n<pre><code class=\"cpp\">\ttemplate &lt;typename F&gt; \tstatic void (* declfunc() )( F );  \ttemplate &lt;typename F&gt;  \tstatic void (* gen( void (F *) ) )( F   ); \ttemplate &lt;typename F&gt;  \tstatic void (* gen( void (F  ) ) )( F * ); <\/code><\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\u0417\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0435\u0434, \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043e\u043a. \u041d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b Clang (\u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 3.4 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e), \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b GCC (\u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 4.9), \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 VS (cl 19.x, \u043c\u043e\u0436\u0435\u0442 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0435) \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438 \u0435\u0433\u043e \u0442\u0430\u043a, \u043a\u0430\u043a \u044f \u043e\u0436\u0438\u0434\u0430\u043b. \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043a\u0430\u043a \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u0445:  <\/p>\n<pre><code class=\"cpp\">\ttemplate &lt;typename X&gt;  \tstatic char (& check_is_function( X ) ) \t[ \t    is_same&lt;void(*)( F ), X&gt;::value + 1 \t]; <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0438\u043f, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0432 check_is_function, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 <code>void(*)( F )<\/code>, \u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u0434\u0432\u0443\u0445 <code>char<\/code>, e\u0441\u043b\u0438 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u2014 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e <code>char<\/code> (\u0442\u0438\u043f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u043f\u043e\u0442\u043e\u043c \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>sizeof<\/code>). \u0412\u0435\u0437\u0434\u0435 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e <code>F<\/code> \u2013 \u044d\u0442\u043e \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043d\u0430 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u043a \u0442\u0438\u043f\u0443 \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00bb. \u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u043e\u0444\u043e\u0440\u043c\u0438\u0442\u044c \u044d\u0442\u043e \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d,  <\/p>\n<pre><code class=\"cpp\">\ttemplate &lt;typename F&gt; \tstruct is_function \t{ \t    template &lt;typename X&gt;  \t    static char (& check_is_function( X ) ) \t    [ \t        is_same&lt;void(*)( F ), X&gt;::value + 1 \t    ]; \t    enum  \t    { \t        value = sizeof( check_is_function( gen( declfunc&lt;F&gt;() ) ) ) - 1 \t    }; \t}; <\/code><\/pre>\n<p>\u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043d\u0430 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0432\u044b\u0448\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430\u0445 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0430  <\/p>\n<pre><code class=\"cpp\">\tis_function&lt;int()&gt;::value; \tis_function&lt;int&gt;::value;  \ttypedef void fcv() const; \tis_function&lt;fcv&gt;::value; <\/code><\/pre>\n<p>\u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b 1, 0 \u0438 1 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e (\u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/wanderhq\/ct_examples\/blob\/master\/src\/is_function_0.cpp\">\u0437\u0434\u0435\u0441\u044c<\/a>, \u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <a href=\"http:\/\/melpon.org\/wandbox\/permlink\/fJkjJ4um9XWxFZFz\">\u0437\u0434\u0435\u0441\u044c<\/a>). \u0414\u0430, \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438, <code>void<\/code> \u0438 \u0442.\u0434. \u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438 \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043d\u0435 \u043d\u0430 \u044d\u0442\u043e\u043c. \u0415\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u044d\u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430\u0445 \u043d\u043e\u0432\u0435\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 (GCC &gt;= 4.9, Clang &gt;= 3.5, cl 19.x), \u0442\u043e \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u0432\u044b\u0432\u043e\u0434 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b 1, 0, 0 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0442\u0438\u043f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 <i>cv-qualifier-seq<\/i> (\u044d\u0442\u043e \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 <code>const<\/code> \u0438\u043b\u0438 <code>volatile<\/code> \u0432 \u043a\u043e\u043d\u0446\u0435), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u0442\u0438\u043f \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f) \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0431\u044b\u0442\u044c \u0432\u0435\u0440\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435:  <\/p>\n<pre><code class=\"cpp\">\ttemplate &lt;typename F&gt;  \tstatic void (* gen( void (F *) ) )( F   ); <\/code><\/pre>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f\u0441\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a),<br \/>  <a name=\"8_3_1_4\"><\/a><b>8.3.1\/4<\/b>  <\/p>\n<blockquote><p>Forming a pointer to function type is ill-formed if the function type has cv-qualifiers or a ref-qualifier;<\/p><\/blockquote>\n<p>\u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u0438 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u043a \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u0438 \u043a \u0442\u0430\u043a\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u2014 \u044d\u0442\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0412 \u0421++03 \u043d\u0435 \u0431\u044b\u043b\u043e \u0441\u0442\u043e\u043b\u044c \u0436\u0435 \u0447\u0435\u0442\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 (\u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u043c\u043e\u0436\u043d\u043e <a href=\"http:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/cwg_defects.html#1417\">\u0437\u0434\u0435\u0441\u044c<\/a>). \u0427\u0442\u043e, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0442\u0430\u043c \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0443\u043c\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043e\u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043e \u0447\u0435\u043c \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043f\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435:  <\/p>\n<blockquote><p>It is not sufficiently clear from the existing wording that pointers and references to function types containing cv-qualifiers or a ref-qualifier are not permitted and thus would result in a deduction failure if created during template argument substitution.<\/p><\/blockquote>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 cl 18.x \u0438\u043b\u0438 icc 13.x \u0438 14.x). \u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0443\u0436\u0435 \u0437\u0430\u0434\u0430\u043b\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u044f\u0432\u043d\u043e\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u0438 \u043a \u0442\u0438\u043f\u0443 \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 <i>cv-qualifier-seq<\/i>\u00bb \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e, \u0442\u043e \u043d\u0435\u044f\u0432\u043d\u043e\u0435, \u043f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0442\u043e\u0436\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e. \u0414\u0430, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u044d\u0442\u043e \u0442\u0430\u043a. <i>\u041e\u0434\u043d\u0430\u043a\u043e, \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b \u044d\u0442\u043e \u044f\u0432\u043d\u043e \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u043b.<\/i> <br \/>  \u0412 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 \u0421++03 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0435:<br \/>  <a name=\"8_3_5_4\"><\/a><b>8.3.5\/4<\/b>  <\/p>\n<blockquote><p>A cv-qualifier-seq shall only be part of the function type for a nonstatic member function, the function type to which a pointer to member refers, or the top-level function type of a function typedef declaration.<\/p><\/blockquote>\n<p>, \u0447\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430\u043c \u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0437\u043a\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 <i>cv-qualifier-seq<\/i>. \u0418 \u043d\u0430\u0448 \u0441\u043b\u0443\u0447\u0430\u0439 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0442\u0443\u0434\u0430 \u043d\u0435 \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f. <br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<i>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435, \u0447\u0442\u043e \u043a\u043e\u0434, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u00ab\u043c\u0443\u0442\u0430\u0446\u0438\u0438\u00bb \u0442\u0438\u043f\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043d\u043e \u0440\u0430\u0437 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043f\u043e\u043b\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u0414\u0443\u043c\u0430\u044e, \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u0442 \u043f\u0438\u0449\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0439 \u043e \u043d\u0435\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043c\u0438\u0440\u0430.<\/i><\/p>\n<p>  <a name=\"impl_1\"><\/a><\/p>\n<h2><font color=\"#464646\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u21161 (\u0440\u0430\u0431\u043e\u0447\u0430\u044f)<\/font><\/h2>\n<p>  &nbsp;&nbsp;&nbsp;&nbsp;\u042d\u0442\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e (\u044f \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d \u043d\u0430 100%, \u043d\u043e \u043d\u0430 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442) \u044d\u0442\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443, \u0438 \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u0442\u044c \u043f\u043e\u0432\u043e\u0434\u043e\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0431\u0430\u0433\u0440\u0435\u043f\u043e\u0440\u0442\u043e\u0432 \u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0442\u0440\u0435\u0445 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432.<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 <i>cv-qualifier-seq<\/i> \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0432 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0441\u043f\u0440\u044f\u0442\u0430\u043d \u043a\u043b\u044e\u0447 \u043a \u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044e. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c SFINAE-\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u043e\u0442\u0441\u0435\u0447\u0435\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">\ttemplate &lt;typename F&gt; \tstruct may_add_ptr \t{ \t    template &lt;typename P&gt; \t    static char (& may_add_ptr_check(P *) )[2]; \t    template &lt;typename P&gt; \t    static char (& may_add_ptr_check(...) )[1];  \t    enum  \t    {  \t         value = sizeof( may_add_ptr_check&lt;F&gt;(0) ) - 1  \t    }; \t}; <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 <code>P*<\/code> \u043d\u0435\u0432\u0435\u0440\u043d\u0430, \u0442\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 \u0441 \u044d\u043b\u043b\u0438\u043f\u0441\u0438\u0441\u043e\u043c. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 <code>sizeof<\/code> \u043e\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043d\u0435\u0442 \u043b\u0438\u0431\u043e 1, \u043b\u0438\u0431\u043e 2. \u0412\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435\u043c \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u043c\u044b \u0434\u043e\u0431\u044c\u0435\u043c\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>value<\/code> 0 \u0438\u043b\u0438 1, \u0433\u0434\u0435 1 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043a \u0442\u0438\u043f\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u0438 0, \u0435\u0441\u043b\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e (\u0434\u0430\u043b\u0435\u0435 \u044f \u0431\u0443\u0434\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u043f\u0440\u0438\u0435\u043c\u043e\u043c \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c). \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 \u2014 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u042f \u043f\u043e\u043a\u0430\u0436\u0443 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438, \u0442.\u043a. \u043e\u043d \u0431\u043e\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c.  <\/p>\n<pre><code class=\"cpp\">\ttemplate &lt;typename F&gt; \tstatic typename enable_if&lt; \t    may_add_ptr&lt;F&gt;::value == 1, void (*)(typename remove_reference&lt;F&gt;::type *) \t&gt;::type declfunc();  \ttemplate &lt;typename F&gt; \tstatic typename enable_if&lt; \t    may_add_ptr&lt;F&gt;::value == 0, void (*)(typename remove_reference&lt;F&gt;::type  ) \t&gt;::type declfunc(); <\/code><\/pre>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0442\u0438\u043f <code>type<\/code> \u2013 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0438\u043f. \u042d\u0442\u043e \u0442\u043e\u0442 \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043d\u0430 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u043a \u0442\u0438\u043f\u0443 \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00bb. \u0418\u0442\u0430\u043a, \u0435\u0441\u043b\u0438<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<code>declfunc&lt;F&gt;() == void(*)( F )<\/code><br \/>  \u0442\u043e \u043d\u0430\u0448 \u0442\u0438\u043f <code>F<\/code> \u2013 \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 (<code>remove_reference<\/code>) \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0435\u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 <br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<code>F = R(&)(Args)<\/code>, \u0438\u043b\u0438 <code>F = T &<\/code><br \/>  \u0442.\u043a. \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0438\u043f\u044b:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<code>void(*)( R(*)(Args) )<\/code> \u0438 <code>void(*)( R(&)(Args) )<\/code><br \/>  \u0438\u043b\u0438<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<code>void(*)( T )<\/code> \u0438 <code>void(*)( T & )<\/code><br \/>  \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u042d\u0442\u0438 \u0442\u0438\u043f\u044b, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u043d\u0430\u043c \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0436\u0435, \u0435\u0441\u043b\u0438 \u0442\u0438\u043f <code>F<\/code> \u2013 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0438\u0434\u0430 <code>R(Args)<\/code>, \u0442\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0443\u0442<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<code>void(*)( R(*)(Args) )<\/code> \u0438 <code>void(*)( R(Args) )<\/code><br \/>  \u044d\u0442\u0438 \u0442\u0438\u043f\u044b \u0440\u0430\u0432\u043d\u044b, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 (<a href=\"#8_3_5_3\">8.3.5\/3<\/a>). \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 <code>F<\/code> \u2013 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0438\u0434\u0430 <code>R(Args) const<\/code>, \u0442\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0443\u0442<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<code>void(*)( R(Args) const )<\/code> \u0438 <code>void(*)( R(Args) const )<\/code><br \/>  \u044d\u0442\u0438 \u0442\u0438\u043f\u044b \u0442\u043e\u0436\u0435 \u0440\u0430\u0432\u043d\u044b, \u0447\u0442\u043e \u043d\u0430\u043c \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<br \/>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 <code>F = T<\/code> (\u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f), \u0442\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0443\u0442<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<code>void(*)( T * )<\/code> \u0438 <code>void(*)( T )<\/code><br \/>  \u044d\u0442\u0438 \u0442\u0438\u043f\u044b \u043d\u0435 \u0440\u0430\u0432\u043d\u044b, \u0447\u0442\u043e \u043d\u0430\u043c \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0442\u0438\u043f\u044b. \u0415\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u043d\u043e, \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <code>is_same<\/code>, \u0442.\u043a. \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043d\u0430\u0448\u0435\u0439 <code>is_function<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u0442\u0438\u043f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043e\u0448\u0438\u0431\u043a\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u043c <code>is_same<\/code> \u043d\u0430 SFINAE-\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u043e\u043b\u043a\u0430:  <\/p>\n<pre><code class=\"cpp\">\ttemplate &lt;typename F&gt; \tstatic char (& is_function_check( void( F ) ) )[2];  \ttemplate &lt;typename F&gt; \tstatic char (& is_function_check(    ...    ) )[1]; <\/code><\/pre>\n<p>\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">\tvalue = sizeof( is_function_check&lt;Tp&gt;( declfunc&lt;Tp&gt;() ) ) - 1;<\/code><\/pre>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\ttemplate &lt;typename Tp&gt; \tstruct is_function \t{ \tprivate: \t    template &lt;typename F&gt; \t    struct may_add_ptr \t    { \t        template &lt;typename X&gt; \t        static char (& may_add_ptr_check(X *) )[2]; \t        template &lt;typename X&gt; \t        static char (& may_add_ptr_check(...) )[1];  \t        enum  \t        {  \t            value = sizeof( may_add_ptr_check&lt;F&gt;(0) ) - 1  \t        }; \t    };  \t    template &lt;typename F&gt; \t    static  \t    typename enable_if&lt; \t        may_add_ptr&lt;F&gt;::value == 1, void (*)(typename remove_reference&lt;F&gt;::type *) \t    &gt;::type declfunc();  \t    template &lt;typename F&gt; \t    static  \t    typename enable_if&lt; \t        may_add_ptr&lt;F&gt;::value == 0, void (*)(typename remove_reference&lt;F&gt;::type ) \t    &gt;::type declfunc();  \t    template &lt;typename F&gt; \t    static char (& is_function_check( void( F ) ) )[2];  \t    template &lt;typename F&gt; \t    static char (& is_function_check(    ...    ) )[1];  \tpublic: \t    enum  \t    {  \t        value = sizeof( is_function_check&lt;Tp&gt;( declfunc&lt;Tp&gt;() ) ) - 1  \t    }; \t}; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441.  <\/p>\n<pre><code class=\"cpp\">\t#define TEST_IS_FUNCTION(Type, R) \\ \t    std::cout &lt;&lt; ((::is_function&lt;Type&gt;::value == R) ? &quot;[SUCCESS]&quot; : &quot;[FAILED]&quot;) \\ \t              &lt;&lt; &quot; Test is_function&lt;&quot; #Type &quot;&gt; (should be [&quot; #R &quot;]):&quot; \\ \t              &lt;&lt; std::boolalpha \\ \t              &lt;&lt; (bool)::is_function&lt;Type&gt;::value &lt;&lt; std::endl <\/code><\/pre>\n<p>\u0418 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043d\u0430\u0431\u043e\u0440\u0435 \u0442\u0435\u0441\u0442\u043e\u0432.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\tstruct S { virtual void f() = 0; };  \tint main() \t{ \t    typedef void f1() const; \t    typedef void f2() volatile; \t    typedef void f3() const volatile;   \t    TEST_IS_FUNCTION(void(int), true); \t    TEST_IS_FUNCTION(void(), true); \t    TEST_IS_FUNCTION(f1, true); \t    TEST_IS_FUNCTION(void(*)(int), false); \t    TEST_IS_FUNCTION(void(&)(int), false); \t    TEST_IS_FUNCTION(f2, true); \t    TEST_IS_FUNCTION(f3, true); \t    TEST_IS_FUNCTION(void(S::*)(), false); \t    TEST_IS_FUNCTION(void(S::*)() const, false); \t    TEST_IS_FUNCTION(S, false); \t    TEST_IS_FUNCTION(int, false); \t    TEST_IS_FUNCTION(int *, false); \t    TEST_IS_FUNCTION(int [], false); \t    TEST_IS_FUNCTION(int [2], false); \t    TEST_IS_FUNCTION(int **, false); \t    TEST_IS_FUNCTION(double, false); \t    TEST_IS_FUNCTION(int *[], false); \t    TEST_IS_FUNCTION(int &, false); \t    TEST_IS_FUNCTION(int const &, false); \t    TEST_IS_FUNCTION(void(...), true); \t    TEST_IS_FUNCTION(int S::*, false); \t    TEST_IS_FUNCTION(void, false); \t    TEST_IS_FUNCTION(void const, false); \t} <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"https:\/\/github.com\/wanderhq\/ct_examples\/blob\/master\/src\/is_function_1.cpp\">\u0417\u0434\u0435\u0441\u044c<\/a> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438 \u0442\u0435\u0441\u0442\u0430, \u0430 <a href=\"http:\/\/melpon.org\/wandbox\/permlink\/LBmut1UsZuTzbNm2\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c. \u041a\u0441\u0442\u0430\u0442\u0438, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0438 \u0434\u043b\u044f \u0421++11. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430 GCC 4.4.x \u2013 6.0, Clang 3.0 \u2013 3.9, VS 2013 \u0438 VS 2105. \u0415\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043a <code>F<\/code> c <i>cv-qualifier-seq<\/i> \u0432\u0435\u0440\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 icc 13.x). \u041d\u0430 \u044d\u0442\u0438\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>  <a name=\"impl_2\"><\/a><\/p>\n<h2><font color=\"#464646\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u21162 (\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443)<\/font><\/h2>\n<p>  &nbsp;&nbsp;&nbsp;&nbsp;\u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c <a href=\"#8_3_4_1\">8.3.4\/1<\/a>. \u0422\u0430\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u0445 \u0442\u0438\u043f\u043e\u0432, \u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c. \u0420\u0430\u0437 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043d\u0435 \u0432\u0441\u0435 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u043d\u0430\u0441 \u0436\u0434\u0435\u0442 \u0431\u00f3\u043b\u044c\u0448\u0430\u044f \u0443\u0434\u0430\u0447\u0430? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043a\u0430\u043a\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c:  <\/p>\n<ol>\n<li>\u0441\u0441\u044b\u043b\u043a\u0438<\/li>\n<li><code>void<\/code><\/li>\n<li>\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b<\/li>\n<li>\u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/li>\n<\/ol>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\u0418\u0442\u0430\u043a, \u043d\u0430\u0448\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430. \u041e\u0442\u0441\u0435\u044f\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c SFINAE-\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0442\u0441\u0435\u0435\u043c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b. \u0425\u043e\u0442\u044f \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u0442\u0441\u0435\u044f\u0442\u044c \u0432\u0441\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0441\u0440\u0430\u0437\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043c\u0435\u0442\u0430\u0444\u0443\u043d\u043a\u0446\u0438\u044f:  <\/p>\n<pre><code class=\"cpp\">\ttemplate &lt;typename Tp&gt; \tstruct is_class; <\/code><\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u0438 void. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:  <\/p>\n<pre><code class=\"cpp\">\ttemplate &lt;typename Tp&gt; \tstruct is_lvalue_reference;  \ttemplate &lt;typename Tp&gt; \tstruct is_void; <\/code><\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\u0412\u0440\u043e\u0434\u0435 \u0431\u044b \u0432\u0441\u0435, \u043d\u043e \u0447\u0435\u0433\u043e-\u0442\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442. \u0412 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u2014 \u044d\u0442\u043e <i>array of unknown bound<\/i> (\u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 <code>T[]<\/code>). \u0415\u0433\u043e \u043d\u0430\u043c \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u0435\u044f\u0442\u044c. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043c\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0438 \u043e\u0442\u0441\u0435\u0438\u0432\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b.  <\/p>\n<pre><code class=\"cpp\">\ttemplate &lt;typename Tp&gt; \tstruct is_array; <\/code><\/pre>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u0430\u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/wanderhq\/ct_examples\/blob\/master\/src\/ct\/type_traits.h\">\u0437\u0434\u0435\u0441\u044c<\/a>, \u0438\u043b\u0438 \u0432\u0437\u044f\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0437 boost.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d:  <\/p>\n<pre><code class=\"cpp\">\ttemplate &lt;typename Tp&gt; \tstruct is_function \t{ \tprivate: \t    template &lt;typename F&gt;  \t    static char (& check_is_function( ... ) )[2]; \t    template &lt;typename F&gt;  \t    static char (& check_is_function( F (*)[1] ) )[1];  \tpublic: \t    enum  \t    {  \t        value = !is_class&lt;Tp&gt;::value \t             && !is_void&lt;Tp&gt;::value \t             && !is_lvalue_reference&lt;Tp&gt;::value \t             && !is_array&lt;Tp&gt;::value \t             && (sizeof( check_is_function&lt;Tp&gt;(0) ) - 1) \t    };  \t}; <\/code><\/pre>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0442\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043c\u044b \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u00ab\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u00bb, \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>check_is_function<\/code>. \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430, \u0437\u043d\u0430\u0447\u0438\u0442 \u0442\u0438\u043f <code>F<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439.<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u0441\u0442\u0430 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 <a href=\"#impl_1\">\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 1<\/a>. \u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/github.com\/wanderhq\/ct_examples\/blob\/master\/src\/is_function_2.cpp\">\u0437\u0434\u0435\u0441\u044c<\/a>, \u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <a href=\"http:\/\/melpon.org\/wandbox\/permlink\/Ud8ffaSttt2kzxWy\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u042d\u0442\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 \u0438 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432. \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0434\u043b\u044f \u0421++11, \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u0441\u0435\u0438\u0432\u0430\u0442\u044c rvalue-\u0441\u0441\u044b\u043b\u043a\u0438.<\/p>\n<p>  <a name=\"final\"><\/a><\/p>\n<h2><font color=\"#464646\">\u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/font><\/h2>\n<p>  1) \u042f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u0442\u0440\u0438 \u0431\u0430\u0433\u0440\u0435\u043f\u043e\u0440\u0442\u0430 \u043d\u0430\u0441\u0447\u0435\u0442 \u043d\u0435\u043b\u0435\u0433\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 <i>cv-qualifier-seq<\/i> \u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f:<br \/>  \u0412 <a href=\"https:\/\/llvm.org\/bugs\/show_bug.cgi?id=26685\">\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 Clang<\/a>.<br \/>  \u0412 <a href=\"https:\/\/gcc.gnu.org\/bugzilla\/show_bug.cgi?id=69898\">\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 GCC<\/a>.<br \/>  \u0412 <a href=\"https:\/\/connect.microsoft.com\/VisualStudio\/feedback\/details\/2389057\">\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 VS<\/a>.<br \/>  \u041a\u0430\u043a \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c, \u044f \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d \u043d\u0430 100%, \u043d\u043e \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u0437\u043d\u0430\u0442\u044c \u043c\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0443.<\/p>\n<p>  2) \u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043c\u043e\u0435\u043c <a href=\"https:\/\/github.com\/wanderhq\/ct_examples\">\u0433\u0438\u0442\u0445\u0430\u0431\u0435<\/a>, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0432 \u043b\u0443\u0447\u0448\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u0417\u0434\u0435\u0441\u044c \u0431\u044b\u043b\u0438 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043e\u043f\u0443\u0449\u0435\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u0442\u043e\u043d\u0430.<\/p>\n<p>  3) \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \ud83d\ude42                 <\/p>\n<div class=\"clear\"><\/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=\"https:\/\/habrahabr.ru\/post\/277727\/\"> https:\/\/habrahabr.ru\/post\/277727\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       &nbsp;&nbsp;&nbsp;&nbsp;\u042d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0442\u0447\u0435\u0442 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u0430\u0444\u0443\u043d\u043a\u0446\u0438\u044e is_function \u0434\u043b\u044f \u0421++98\/03, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;\u0417\u0430\u0447\u0435\u043c, \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432\u044b, \u0432 2016 \u0433\u043e\u0434\u0443 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f? \u042f \u043e\u0442\u0432\u0435\u0447\u0443. \u042d\u0442\u043e challenge. \u041a\u0440\u043e\u043c\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u044d\u0442\u0430, \u0441\u043f\u0435\u0440\u0432\u0430 \u0447\u0438\u0441\u0442\u043e \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0438\u0437 \u0440\u0430\u0437\u0440\u044f\u0434\u0430 \u00ab\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u043b\u0438 \u043d\u0435\u0442\u00bb, \u0432\u0441\u043a\u0440\u044b\u043b\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430\u0445. \u0412\u0441\u0435\u0445, \u043a\u043e\u043c\u0443 \u043d\u0435 \u0447\u0443\u0436\u0434\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435, \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c.  <\/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-274755","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/274755","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=274755"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/274755\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=274755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=274755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=274755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}