{"id":312072,"date":"2020-10-27T09:00:23","date_gmt":"2020-10-27T09:00:23","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=312072"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=312072","title":{"rendered":"\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 C++ \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 cpp-validator"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ym\/wl\/sr\/ymwlsr0la39nuuveifzqjm5nwoo.jpeg\"\/><\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0441\u044f \u0438 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 &quot;Hello world!&quot;, \u0438 \u0432 \u0442\u043e\u043c \u0438\u043b\u0438 \u0438\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0437\u0440\u0435\u043b\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, Google \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0432\u044b\u0434\u0430\u0435\u0442 \u043d\u043e\u043b\u044c \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043d\u0430\u0439\u0442\u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0430 C++.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<p>\u0412 \u043b\u0443\u0447\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442\u0430\u043c \u043d\u0430\u0439\u0434\u0443\u0442\u0441\u044f \u0438\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430 C++, \u0438\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a <em>JSON<\/em> \u0438\u043b\u0438 <em>XML<\/em>. \u041f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043b\u0438\u0431\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043b\u0438\u0431\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043f\u043b\u043e\u0445\u043e \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u044b \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. <\/p>\n<p>  <\/p>\n<p><em>\u0415\u0441\u043b\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a\u0442\u043e-\u0442\u043e \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 C++ \u043f\u043e\u043c\u0438\u043c\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 GUI-\u0444\u043e\u0440\u043c, \u0442\u043e \u0431\u0443\u0434\u0443 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u0435\u043b\u0435\u043d \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432 \u0441\u0442\u0430\u0442\u044c\u044e.<\/em><\/p>\n<p>  <\/p>\n<h2 id=\"soderzhanie\">\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<ul>\n<li><a href=\"#\u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f\">\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f<\/a><\/li>\n<li><a href=\"#\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\">\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/a><\/li>\n<li><a href=\"#\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"#\u0442\u0435\u043a\u0443\u0449\u0438\u0439-\u0441\u0442\u0430\u0442\u0443\u0441-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\">\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441<\/a><\/li>\n<li><a href=\"#\u043f\u0440\u0438\u043c\u0435\u0440\u044b\">\u041f\u0440\u0438\u043c\u0435\u0440\u044b<\/a><br \/> \n<ul>\n<li><a href=\"#\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f-\u0447\u0438\u0441\u043b\u0430\">\u0422\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0447\u0438\u0441\u043b\u0430<\/a><\/li>\n<li><a href=\"#\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f-\u0441-\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c\">\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c<\/a><\/li>\n<li><a href=\"#\u044f\u0432\u043d\u043e\u0435-\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435-\u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\u0430-\u043a-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439\">\u042f\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\u0430 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439<\/a><\/li>\n<li><a href=\"#\u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439-\u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\">\u0421\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440<\/a><\/li>\n<li><a href=\"#\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c-\u0447\u0442\u043e-\u0447\u0438\u0441\u043b\u043e-\u0432\u0445\u043e\u0434\u0438\u0442-\u0432-\u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b-\u0438-\u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c-\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435-\u043e\u0448\u0438\u0431\u043a\u0438\">\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b, \u0438 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438<\/a><\/li>\n<li><a href=\"#\u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439-\u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440-\u0434\u043b\u044f-\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\">\u0421\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430<\/a><\/li>\n<li><a href=\"#\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b-\u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432\">\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432<\/a><\/li>\n<li><a href=\"#\u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e-\u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e-\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430-\u043e\u0431\u044a\u0435\u043a\u0442\u0430\">\u041f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/a><\/li>\n<li><a href=\"#\u043f\u0440\u0435-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f-\u0434\u0430\u043d\u043d\u044b\u0445-\u043f\u0435\u0440\u0435\u0434-\u0437\u0430\u043f\u0438\u0441\u044c\u044e\">\u041f\u0440\u0435-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e<\/a><\/li>\n<li><a href=\"#\u043e\u0434\u0438\u043d-\u0438-\u0442\u043e\u0442-\u0436\u0435-\u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440-\u0434\u043b\u044f-\u043f\u043e\u0441\u0442-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438-\u0438-\u043f\u0440\u0435-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438\">\u041e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u0441\u0442-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0435-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438<\/a><\/li>\n<li><a href=\"#\u043f\u0435\u0440\u0435\u0432\u043e\u0434-\u043e\u0448\u0438\u0431\u043e\u043a-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438-\u043d\u0430-\u0440\u0443\u0441\u0441\u043a\u0438\u0439-\u044f\u0437\u044b\u043a\">\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u043e\u0448\u0438\u0431\u043e\u043a \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"motivaciya\">\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f<\/h2>\n<p>  <\/p>\n<p>\u0421\u0442\u043e\u0438\u0442\u044c \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u043e\u0442\u0438\u0432\u043e\u043c \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f C++ \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u043b\u043e \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0435\u0434\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c: <\/p>\n<p>  <\/p>\n<ul>\n<li>\u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445; <\/li>\n<li>\u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043a\u043e\u043c\u0430\u043d\u0434, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432;<\/li>\n<li>\u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u0432\u043e\u0434\u0438\u043c\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435, \u043f\u0435\u0440\u0435\u0434 \u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0422.\u0435., \u0435\u0441\u043b\u0438 \u0441 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a \u044d\u0442\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0431\u044b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c? \u0418 \u0443\u0436\u0435 \u043f\u043e\u0442\u043e\u043c \u044d\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u0441\u043b\u0443\u0447\u0430\u044e \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0447\u0435\u0442\u043a\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438;<\/li>\n<li>\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u0430\u0432\u0438\u043b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438;<\/li>\n<li>\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c, \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430, \u043f\u043e\u0445\u043e\u0436\u0435\u0433\u043e \u043d\u0430 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439. \u0412 \u0434\u0440\u0443\u0433\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u0430\u0432\u0438\u043b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438. \u041f\u0440\u0438\u0447\u0435\u043c, \u0440\u0430\u0437\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0434\u0438\u043d \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u044b SQL. \u0418, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0440\u0435\u0442\u0438\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u2014 \u044d\u0442\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<h2 id=\"vozmozhnosti-biblioteki\">\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/h2>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/evgeniums\/cpp-validator\">cpp-validator<\/a> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <em>header-only<\/em> \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0434\u043b\u044f <em>\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e<\/em> C++ \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 C++14\/C++17. \u0412 \u043a\u043e\u0434\u0435 <code>cpp-validator<\/code> \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/www.boost.org\/doc\/libs\/release\/libs\/hana\/\">Boost.Hana<\/a>. <\/p>\n<p>  <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>cpp-validator<\/code> \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u043d\u0438\u0436\u0435.<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u044f\u0437\u044b\u043a\u0430:<br \/> \n<ul>\n<li>\u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445;<\/li>\n<li>\u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f:<br \/> \n<ul>\n<li>\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u043e\u0432;<\/li>\n<li>\u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432\u0438\u0434\u0430 <em>getter<\/em>;<\/li>\n<\/ul>\n<\/li>\n<li>\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432;<\/li>\n<li>\u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b.<\/li>\n<\/ul>\n<\/li>\n<li><em>\u041f\u043e\u0441\u0442-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f<\/em> \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0443\u0436\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c.<\/li>\n<li><em>\u041f\u0440\u0435-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f<\/em> \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c.<\/li>\n<li>\u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0432\u044f\u0437\u043e\u043a <em>AND<\/em>, <em>OR<\/em> \u0438 <em>NOT<\/em>.<\/li>\n<li>\u041c\u0430\u0441\u0441\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438 <em>ALL<\/em> \u0438\u043b\u0438 <em>ANY<\/em>.<\/li>\n<li>\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0441 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (<em>lazy operands<\/em>).<\/li>\n<li>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/li>\n<li>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438:<br \/> \n<ul>\n<li>\u0448\u0438\u0440\u043e\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u043e\u0448\u0438\u0431\u043e\u043a;<\/li>\n<li>\u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0441\u043b\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0438\u0441\u043b\u0430, \u0440\u043e\u0434\u0430 \u0438 \u0442.\u0434.<\/li>\n<\/ul>\n<\/li>\n<li>\u0420\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c:<br \/> \n<ul>\n<li>\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438;<\/li>\n<li>\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0430\u0432\u0438\u043b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438;<\/li>\n<li>\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u0430\u0432\u0438\u043b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 (<em>\u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432<\/em>).<\/li>\n<\/ul>\n<\/li>\n<li>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b, \u0443\u0436\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443:<br \/> \n<ul>\n<li>\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f;<\/li>\n<li>\u043b\u0435\u043a\u0441\u0438\u043a\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435, \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0438 \u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430;<\/li>\n<li>\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432;<\/li>\n<li>\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0438\u043b\u0438 \u043d\u0430\u0431\u043e\u0440;<\/li>\n<li>\u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/li>\n<\/ul>\n<\/li>\n<li>\u0428\u0438\u0440\u043e\u043a\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b <em>Clang<\/em>, <em>GCC<\/em>, <em>MSVC<\/em> \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b <em>Windows<\/em>, <em>Linux<\/em>, <em>macOS<\/em>, <em>iOS<\/em>, <em>Android<\/em>.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"ispolzovanie-biblioteki\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/h2>\n<p>  <\/p>\n<p>\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>cpp-validator<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0442\u0440\u0438 \u0448\u0430\u0433\u0430:<\/p>\n<p>  <\/p>\n<ol>\n<li>\u0441\u043f\u0435\u0440\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <em>\u043f\u043e\u0447\u0442\u0438-\u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e<\/em> \u044f\u0437\u044b\u043a\u0430;<\/li>\n<li>\u0437\u0430\u0442\u0435\u043c \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438;<\/li>\n<li>\u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438, \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u0438\u0431\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u043b\u0438\u0431\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/li>\n<\/ol>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\u0430 auto container_validator=validator(    _[size](eq,1), \/\/ \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d 1    _[&quot;field1&quot;](exists,true), \/\/ \u043f\u043e\u043b\u0435 &quot;field1&quot; \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435    _[&quot;field1&quot;](ne,&quot;undefined&quot;) \/\/ \u043f\u043e\u043b\u0435 &quot;field1&quot; \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u0440\u0430\u0432\u043d\u043e &quot;undefined&quot; );  \/\/ \u0443\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f std::map&lt;std::string,std::string&gt; map1={{&quot;field1&quot;,&quot;value1&quot;}}; validate(map1,container_validator);  \/\/ \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f, \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u043e\u0448\u0438\u0431\u043a\u0438 error_report err; std::map&lt;std::string,std::string&gt; map2={{&quot;field2&quot;,&quot;value2&quot;}}; validate(map2,container_validator,err); if (err) {     std::cerr&lt;&lt;err.message()&lt;&lt;std::endl;     \/* \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:     field1 must exist     *\/ }  \/\/ \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f, \u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c try {     std::map&lt;std::string,std::string&gt; map3={{&quot;field1&quot;,&quot;undefined&quot;}};     validate(map3,container_validator); } catch(const validation_error&amp; ex) {     std::cerr&lt;&lt;ex.what()&lt;&lt;std::endl;     \/* \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:     field1 must be not equal to undefined     *\/ }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 <code>cpp-validator<\/code> \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0439 \u043e\u0448\u0438\u0431\u043e\u043a, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u043e\u0432\u044b\u0435 <em>\u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b<\/em>-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u0430\u0432\u0438\u043b \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0432\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u043e\u0439, \u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p>  <\/p>\n<h2 id=\"tekuschiy-status-biblioteki\">\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/h2>\n<p>  <\/p>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <code>cpp-validator<\/code> \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430 GitHub \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"https:\/\/github.com\/evgeniums\/cpp-validator\">https:\/\/github.com\/evgeniums\/cpp-validator<\/a> \u0438 \u0433\u043e\u0442\u043e\u0432\u0430 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u2014 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 1.0.2. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 <a href=\"http:\/\/boost.org\/LICENSE_1_0.txt\">Boost 1.0<\/a>.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f, \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<h2 id=\"primery\">\u041f\u0440\u0438\u043c\u0435\u0440\u044b<\/h2>\n<p>  <\/p>\n<h3 id=\"trivialnaya-validaciya-chisla\">\u0422\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0447\u0438\u0441\u043b\u0430<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\u0430 auto v=validator(gt,100); \/\/ \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c 100  \/\/ \u043e\u0431\u044a\u0435\u043a\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 error err;  \/\/ \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b validate(90,v,err); if (err) {   \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 }  \/\/ \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b validate(200,v,err); if (!err) {   \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u0430 }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"validaciya-s-isklyucheniem\">\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\u0430 auto v=validator(gt,100); \/\/ \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c 100  try {     validate(200,v); \/\/ \u0443\u0441\u043f\u0435\u0448\u043d\u043e     validate(90,v); \/\/ \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 } catch (const validation_error&amp; err) {     std::cerr &lt;&lt; err.what() &lt;&lt; std::endl;     \/* \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:     must be greater than 100     *\/ } <\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"yavnoe-primenenie-validatora-k-peremennoy\">\u042f\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\u0430 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\u0430 auto v=validator(gt,100); \/\/ \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c 100  \/\/ \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c  int value1=90; if (!v.apply(value1)) {   \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430 }  int value2=200; if (v.apply(value2)) {   \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u0430 }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"sostavnoy-validator\">\u0421\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440: \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0435\u043d\u044c\u0448\u0435 15 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u043e &quot;sample string&quot; auto v=validator(   length(lt,15),   value(gte,&quot;sample string&quot;) );  \/\/ \u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\u0430 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c  std::string str1=&quot;sample&quot;; if (!v.apply(str1)) {   \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u043d\u0435\u0443\u043f\u0435\u0448\u043d\u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e sample \u0431\u0438\u043d\u0430\u0440\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c sample string }  std::string str2=&quot;sample string+&quot;; if (v.apply(str2)) {   \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u0430 }  std::string str3=&quot;too long sample string&quot;; if (!v.apply(str3)) {   \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 15 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"proverit-chto-chislo-vhodit-v-interval-i-napechatat-opisanie-oshibki\">\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b, \u0438 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440: \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b [95,100] auto v=validator(in,interval(95,100));  \/\/ \u043e\u0431\u044a\u0435\u043a\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 error_report err;  \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 size_t val=90; validate(val,v,err); if (err) {     std::cerr &lt;&lt; err.message() &lt;&lt; std::endl;      \/* \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:     must be in interval [95,100]     *\/ }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"sostavnoy-validator-dlya-proverki-elementa-konteynera\">\u0421\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 auto v=validator(                 _[&quot;field1&quot;](gte,&quot;xxxxxx&quot;)                  ^OR^                 _[&quot;field1&quot;](size(gte,100) ^OR^ value(gte,&quot;zzzzzzzzzzzz&quot;))             );  \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0438 \u043f\u0435\u0447\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438  error_report err; std::map&lt;std::string,std::string&gt; test_map={{&quot;field1&quot;,&quot;value1&quot;}}; validate(test_map,v,err); if (err) {     std::cerr &lt;&lt; err.message() &lt;&lt; std::endl;     \/* \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:     field1 must be greater than or equal to xxxxxx OR size of field1 must be greater than or equal to 100 OR field1 must be greater than or equal to zzzzzzzzzzzz     *\/ }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"proverit-elementy-vlozhennyh-konteynerov\">\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 auto v=validator(                 _[&quot;field1&quot;][1](in,range({10,20,30,40,50})),                 _[&quot;field1&quot;][2](lt,100),                 _[&quot;field2&quot;](exists,false),                 _[&quot;field3&quot;](empty(flag,true))             );  \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0438 \u043f\u0435\u0447\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 error_report err; std::map&lt;std::string,std::map&lt;size_t,size_t&gt;&gt; nested_map={             {&quot;field1&quot;,{{1,5},{2,50}}},             {&quot;field3&quot;,{}}         }; validate(nested_map,v,err); if (err) {     std::cerr &lt;&lt; err.message() &lt;&lt; std::endl;     \/* \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:     element #1 of field1 must be in range [10, 20, 30, 40, 50]     *\/ }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"provesti-validaciyu-kastomnogo-svoystva-obekta\">\u041f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441 getter \u043c\u0435\u0442\u043e\u0434\u043e\u043c struct Foo {     bool red_color() const     {         return true;     } };  \/\/ \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e red_color DRACOSHA_VALIDATOR_PROPERTY_FLAG(red_color,&quot;Must be red&quot;,&quot;Must be not red&quot;);  \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 red_color auto v=validator(     _[red_color](flag,false) );  \/\/ \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443  error_report err; Foo foo_instance; validate(foo_instance,v,err); if (err) {     std::cerr &lt;&lt; err.message() &lt;&lt; std::endl;     \/* \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:     &quot;Must be not red&quot;     *\/ }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"pre-validaciya-dannyh-pered-zapisyu\">\u041f\u0440\u0435-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0432\u0438\u0434\u0430 setter struct Foo {     std::string bar_value;      uint32_t other_value;     size_t some_size;      void set_bar_value(std::string val)     {         bar_value=std::move(val);     } };  using namespace DRACOSHA_VALIDATOR_NAMESPACE;  \/\/ \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 DRACOSHA_VALIDATOR_PROPERTY(bar_value); DRACOSHA_VALIDATOR_PROPERTY(other_value);  \/\/ \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 set_member_t \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 bar_value \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b Foo DRACOSHA_VALIDATOR_NAMESPACE_BEGIN  template &lt;&gt; struct set_member_t&lt;Foo,DRACOSHA_VALIDATOR_PROPERTY_TYPE(bar_value)&gt; {     template &lt;typename ObjectT, typename MemberT, typename ValueT&gt;     void operator() (             ObjectT&amp; obj,             MemberT&amp;&amp;,             ValueT&amp;&amp; val         ) const     {         obj.set_bar_value(std::forward&lt;ValueT&gt;(val));     } };  DRACOSHA_VALIDATOR_NAMESPACE_END  \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 \u0441 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 auto v=validator(     _[bar_value](ilex_ne,&quot;UNKNOWN&quot;), \/\/ \u043b\u0435\u043a\u0441\u0438\u043a\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 &quot;\u043d\u0435 \u0440\u0430\u0432\u043d\u043e&quot; \u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430     _[other_value](gte,1000) \/\/ \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u043e 1000 );  Foo foo_instance; error_report err;  \/\/ \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e bar_value \u043e\u0431\u044a\u0435\u043a\u0442\u0430 foo_instance set_validated(foo_instance,bar_value,&quot;Hello world&quot;,v,err); if (!err) {     \/\/ \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e bar_value \u043e\u0431\u044a\u0435\u043a\u0442\u0430 foo_instance \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e }  \/\/ \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e bar_value \u043e\u0431\u044a\u0435\u043a\u0442\u0430 foo_instance set_validated(foo_instance,bar_value,&quot;unknown&quot;,v,err); if (err) {     \/\/ \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u0430\u0441\u044c     std::cerr &lt;&lt; err.message() &lt;&lt; std::endl;     \/* \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:      bar_value must be not equal to UNKNOWN      *\/ }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"odin-i-tot-zhe-validator-dlya-post-validacii-i-pre-validacii\">\u041e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u0441\u0442-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0435-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">#include &lt;iostream&gt; #include &lt;dracosha\/validator\/validator.hpp&gt; #include &lt;dracosha\/validator\/validate.hpp&gt; using namespace DRACOSHA_VALIDATOR_NAMESPACE;  namespace validator_ns {  \/\/ \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c getter \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 &quot;x&quot; DRACOSHA_VALIDATOR_PROPERTY(GetX);  \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 GetX auto MyClassValidator=validator(    \/*     &quot;x&quot; \u0432 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u0445 - \u044d\u0442\u043e \u0438\u043c\u044f \u043f\u043e\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043e\u0442\u0447\u0435\u0442\u0435 \u0432\u043c\u0435\u0441\u0442\u043e GetX;    interval.open() - \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a    *\/    _[GetX](&quot;x&quot;)(in,interval(0,500,interval.open()))  );  } using namespace validator_ns;  \/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430   class MyClass {   double x;  public:    \/\/ \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0441 \u043f\u043e\u0441\u0442-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0435\u0439   MyClass(double _x) : x(_x) {       validate(*this,MyClassValidator);   }    \/\/ Getter   double GetX() const noexcept   {      return _x;   }    \/\/ Setter \u0441 \u043f\u0440\u0435-\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0435\u0439   void SetX(double _x) {     validate(_[validator_ns::GetX],_x,MyClassValidator);     x = _x;   } };  int main() {  \/\/ \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0441 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c try {     MyClass obj1{100.0}; \/\/ ok } catch (const validation_error&amp; err) { }  \/\/ \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0441 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c try {     MyClass obj2{1000.0}; \/\/ \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 } catch (const validation_error&amp; err) {     std::cerr &lt;&lt; err.what() &lt;&lt; std::endl;     \/*      \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:      x must be in interval(0,500)     *\/ }  MyClass obj3{100.0};  \/\/ \u0437\u0430\u043f\u0438\u0441\u044c \u0441 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c try {     obj3.SetX(200.0); \/\/ ok } catch (const validation_error&amp; err) { }  \/\/ \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c try {     obj3.SetX(1000.0); \/\/ \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 } catch (const validation_error&amp; err) {     std::cerr &lt;&lt; err.what() &lt;&lt; std::endl;     \/*      \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:      x must be in interval (0,500)     *\/ }  return 0; }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"perevod-oshibok-validacii-na-russkiy-yazyk\">\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u043e\u0448\u0438\u0431\u043e\u043a \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a<\/h3>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u043a\u043b\u044e\u0447\u0435\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0440\u043e\u0434\u0430, \u043f\u0430\u0434\u0435\u0436\u0430 \u0438 \u0447\u0438\u0441\u043b\u0430 phrase_translator tr; tr[&quot;password&quot;]={                     {&quot;\u043f\u0430\u0440\u043e\u043b\u044c&quot;},                     {&quot;\u043f\u0430\u0440\u043e\u043b\u044f&quot;,grammar_ru::roditelny_padezh}                }; tr[&quot;hyperlink&quot;]={                     {{&quot;\u0433\u0438\u043f\u0435\u0440\u0441\u0441\u044b\u043b\u043a\u0430&quot;,grammar_ru::zhensky_rod}},                     {{&quot;\u0433\u0438\u043f\u0435\u0440\u0441\u0441\u044b\u043b\u043a\u0438&quot;,grammar_ru::zhensky_rod},grammar_ru::roditelny_padezh}                 }; tr[&quot;words&quot;]={                 {{&quot;\u0441\u043b\u043e\u0432\u0430&quot;,grammar_ru::mn_chislo}}             };  \/*  \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 validator_translator_ru() \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a tr \u0434\u043b\u044f \u0438\u043c\u0435\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 *\/ auto tr1=extend_translator(validator_translator_ru(),tr);  \/\/ \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 std::map&lt;std::string,std::string&gt; m1={     {&quot;password&quot;,&quot;123456&quot;},     {&quot;hyperlink&quot;,&quot;zzzzzzzzz&quot;} };  \/\/ \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u043e\u0442\u0447\u0435\u0442\u0430 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435 std::string rep; auto ra1=make_reporting_adapter(m1,make_reporter(rep,make_formatter(tr1)));  \/\/ \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\u044b \u0438 \u043f\u0435\u0447\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435  auto v1=validator(     _[&quot;words&quot;](exists,true)  ); if (!v1.apply(ra1)) {     std::cerr&lt;&lt;rep&lt;&lt;std::endl;     \/*     \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:     \u0441\u043b\u043e\u0432\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c     *\/ } rep.clear();  auto v2=validator(     _[&quot;hyperlink&quot;](eq,&quot;https:\/\/www.boost.org&quot;)  ); if (!v2.apply(ra1)) {     std::cerr&lt;&lt;rep&lt;&lt;std::endl;     \/*     \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:     \u0433\u0438\u043f\u0435\u0440\u0441\u0441\u044b\u043b\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u043d\u0430 https:\/\/www.boost.org     *\/ } rep.clear();  auto v3=validator(     _[&quot;password&quot;](length(gt,7))  ); if (!v3.apply(ra1)) {     std::cerr&lt;&lt;rep&lt;&lt;std::endl;     \/*     \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:     \u0434\u043b\u0438\u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 7     *\/ } rep.clear();  auto v4=validator(     _[&quot;hyperlink&quot;](length(lte,7))  ); if (!v4.apply(ra1)) {     std::cerr&lt;&lt;rep&lt;&lt;std::endl;     \/*     \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442:     \u0434\u043b\u0438\u043d\u0430 \u0433\u0438\u043f\u0435\u0440\u0441\u0441\u044b\u043b\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u0430 7     *\/ } rep.clear();<\/code><\/pre>\n<\/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:\/\/habr.com\/ru\/post\/525204\/\"> https:\/\/habr.com\/ru\/post\/525204\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ym\/wl\/sr\/ymwlsr0la39nuuveifzqjm5nwoo.jpeg\"\/><\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0441\u044f \u0438 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 &quot;Hello world!&quot;, \u0438 \u0432 \u0442\u043e\u043c \u0438\u043b\u0438 \u0438\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0437\u0440\u0435\u043b\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, Google \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0432\u044b\u0434\u0430\u0435\u0442 \u043d\u043e\u043b\u044c \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043d\u0430\u0439\u0442\u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0430 C++.<\/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-312072","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/312072","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=312072"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/312072\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=312072"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=312072"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=312072"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}