{"id":311846,"date":"2020-10-22T09:00:16","date_gmt":"2020-10-22T09:00:16","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=311846"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=311846","title":{"rendered":"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 header-only C++ \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a (awesome-hpp)"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/141\/300\/658\/141300658daf1fe0d2203c866e74a463.png\" alt=\"PVS-Studio \u0438 Awesome hpp\"><\/div>\n<p>  \u0412\u043e\u043b\u0435\u044e \u0441\u0443\u0434\u044c\u0431\u044b \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c &quot;Awesome hpp&quot;. \u042d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C++, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u041d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0434\u044b, \u0435\u0441\u043b\u0438 \u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u044b \u043d\u0430\u0447\u043d\u0443\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio \u043d\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u043e\u0431\u0437\u043e\u0440 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 <a href=\"https:\/\/github.com\/p-ranav\/awesome-hpp\">awesome-hpp<\/a> (A curated list of awesome header-only C++ libraries).<\/p>\n<p>  \u0412\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u043e \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u044f \u0443\u0437\u043d\u0430\u043b \u0438\u0437 \u043f\u043e\u0434\u043a\u0430\u0441\u0442\u0430 &quot;<a href=\"https:\/\/cppcast.com\/telephony-dave-hagedorn\/\">Cross Platform Mobile Telephony<\/a>&quot;. \u041f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0441\u043b\u0443\u0447\u0430\u0435\u043c, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u0441\u0435\u043c C++ \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 <a href=\"https:\/\/cppcast.com\/\">CppCast<\/a>. CppCast is the first podcast for C++ developers by C++ developers!<\/p>\n<p>  \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435, \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e. \u0422\u043e\u043c\u0443 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b:<\/p>\n<ul>\n<li>\u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b. \u041c\u043d\u043e\u0433\u0438\u0435 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/li>\n<li>\u041c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u043d\u0435 \u0432\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b. \u0421 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437 \u043d\u0438\u0445 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0445 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<\/li>\n<li>\u0427\u0430\u0441\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445\/\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0438\u043b\u0438 \u043d\u0435\u0442, \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043a\u043e\u0433\u0434\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u041c\u044b \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u043b\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u043f\u0443\u0441\u0442\u043e\u0439 .cpp \u0444\u0430\u0439\u043b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043c\u0430\u043b\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439.<\/li>\n<\/ul>\n<p>  \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u0438\u0445 \u043d\u0430\u0431\u0440\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u0438 \u043f\u0430\u0440\u043e\u0447\u043a\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043c\u043e\u0438\u0445 \u043a\u043e\u043b\u043b\u0435\u0433 :).<\/b>                         <\/p>\n<div class=\"spoiler_text\">\u042f \u043b\u044e\u0431\u043b\u044e \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0442\u044c \u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u0437\u0430\u043d\u0438\u043c\u0430\u044f\u0441\u044c \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0434\u0435\u043b\u043e\u043c. \u041f\u0440\u0438\u0437\u044b\u0432\u0430\u044e \u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440. \u0423\u0437\u043d\u0430\u0432 \u043f\u0440\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 awesome-hpp, \u044f \u0441\u043c\u043e\u0433 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0434\u0435\u043b\u0430:  <\/p>\n<ul>\n<li>\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0448\u0443 \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443 \u0445\u043e\u0440\u043e\u0448\u0438\u043c\u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 C++11, C++14 \u0438 C++17;<\/li>\n<li>\u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u044e &quot;<a href=\"https:\/\/www.viva64.com\/ru\/b\/0762\/\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u0430\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0432 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442<\/a>&quot;;<\/li>\n<li>\u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u044e &quot;<a href=\"https:\/\/www.viva64.com\/ru\/b\/0761\/\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043e\u0431\u0437\u043e\u0440\u044b \u043a\u043e\u0434\u0430 \u2014 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e<\/a>&quot;;<\/li>\n<li>\u043d\u0430\u043f\u0438\u0441\u0430\u043b \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e;<\/li>\n<li>\u043d\u0430\u043f\u0438\u0448\u0443 \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u0437\u0430\u043c\u0435\u0442\u043a\u0443 \u043d\u0430 \u0442\u0435\u043c\u0443 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (\u0441\u043c. CSV Parser);<\/li>\n<li>\u0443\u0437\u043d\u0430\u044e, \u043a\u0442\u043e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437 \u043a\u043e\u043b\u043b\u0435\u0433 \u0447\u0438\u0442\u0430\u0435\u0442 \u043c\u043e\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u041a\u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u044d\u0442\u043e \u2014 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0435, \u0443 \u043c\u0435\u043d\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0430\u0440\u043e\u0447\u043d\u0430\u044f \u0448\u043e\u043a\u043e\u043b\u0430\u0434\u043a\u0430 \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 :);<\/li>\n<li>\u043f\u043e\u043a\u0430\u0437\u0430\u043b \u044d\u0442\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0437\u0430\u043d\u044f\u0442\u0438\u0439.<\/li>\n<\/ul>\n<\/div><\/div>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<\/b> \u0416\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u044d\u0442\u0443 <a href=\"https:\/\/www.viva64.com\/ru\/open-source-license\/\">\u0444\u043e\u0440\u043c\u0443<\/a>.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445.<\/p>\n<h2>\u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438<\/h2>\n<p>  <\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 iutest<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/srz-zumix\/iutest\">iutest<\/a>:<\/p>\n<blockquote><p>iutest is framework for writing C++ tests.<\/p><\/blockquote>\n<pre><code class=\"cpp\">template&lt;typename Event&gt; pool_handler&lt;Event&gt; &amp; assure() {   ....   return static_cast&lt;pool_handler&lt;Event&gt; &amp;&gt;(it == pools.cend() ?     *pools.emplace_back(new pool_handler&lt;Event&gt;{}) : **it);   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v1023\/\">V1023<\/a> A pointer without owner is added to the &#39;pools&#39; container by the &#39;emplace_back&#39; method. A memory leak will occur in case of an exception. entt.hpp 17114<\/p>\n<p>  \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0443\u0442\u0435\u0447\u043a\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f \u0438 \u043e\u043d \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e \u043e\u043d \u0431\u0440\u043e\u0441\u0438\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u043d.<\/p>\n<p>  \u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u044d\u0442\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043c\u0430\u043b\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0430 \u0438 \u043d\u0435\u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c \u044d\u0442\u043e\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0432 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u044f\u0445 :).<\/p>\n<p>  \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442:<\/p>\n<pre><code class=\"cpp\">pools.emplace_back(std::make_unique&lt;pool_handler&lt;Event&gt;&gt;{})<\/code><\/pre>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u0436\u0435 \u043c\u0435\u0441\u0442\u043e: V1023 A pointer without owner is added to the &#39;pools&#39; container by the &#39;emplace_back&#39; method. A memory leak will occur in case of an exception. entt.hpp 17407<\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 jsoncons<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/danielaparker\/jsoncons\">jsoncons<\/a>:<\/p>\n<blockquote><p>A C++, header-only library for constructing JSON and JSON-like data formats, with JSON Pointer, JSON Patch, JSONPath, JMESPath, CSV, MessagePack, CBOR, BSON, UBJSON.<\/p><\/blockquote>\n<p><b>\u041f\u0435\u0440\u0432\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">static constexpr uint64_t basic_type_bits = sizeof(uint64_t) * 8;  uint64_t* data()  {   return is_dynamic() ? dynamic_stor_.data_ : short_stor_.values_; }  basic_bigint&amp; operator&lt;&lt;=( uint64_t k ) {   size_type q = (size_type)(k \/ basic_type_bits);   ....   if ( k )  \/\/ 0 &lt; k &lt; basic_type_bits:   {     uint64_t k1 = basic_type_bits - k;     uint64_t mask = (1 &lt;&lt; k) - 1;             \/\/ &lt;=     ....     data()[i] |= (data()[i-1] &gt;&gt; k1) &amp; mask;     ....   }   reduce();   return *this; }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v629\/\">V629<\/a> Consider inspecting the &#39;1 &lt;&lt; k&#39; expression. Bit shifting of the 32-bit value with a subsequent expansion to the 64-bit type. bigint.hpp 744<\/p>\n<p>  \u042d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 &quot;<a href=\"https:\/\/www.viva64.com\/ru\/b\/0762\/\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u0430\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0432 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442<\/a>&quot;. \u0415\u0441\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u0440\u0430\u0442\u043a\u043e, \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u043a\u0438, \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">uint64_t mask = (static_cast&lt;uint64_t&gt;(1) &lt;&lt; k) - 1;<\/code><\/pre>\n<p>  \u0418\u043b\u0438 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">uint64_t mask = (1ull &lt;&lt; k) - 1;<\/code><\/pre>\n<p>  \u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u043e\u0448\u0438\u0431\u043a\u0443, \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u0430\u044f, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0437\u0434\u0435\u0441\u044c: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v629\/\">V629<\/a> Consider inspecting the &#39;1 &lt;&lt; k&#39; expression. Bit shifting of the 32-bit value with a subsequent expansion to the 64-bit type. bigint.hpp 779<\/p>\n<p>  <b>\u0412\u0442\u043e\u0440\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">template &lt;class CharT = typename std::iterator_traits&lt;Iterator&gt;::value_type&gt; typename std::enable_if&lt;sizeof(CharT) == sizeof(uint16_t)&gt;::type  next() UNICONS_NOEXCEPT {     begin_ += length_;     if (begin_ != last_)     {         if (begin_ != last_)         {   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v571\/\">V571<\/a> Recurring check. The &#39;if (begin_ != last_)&#39; condition was already verified in line 1138. unicode_traits.hpp 1140<\/p>\n<p>  \u0421\u0442\u0440\u0430\u043d\u043d\u0430\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430. \u0415\u0441\u0442\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0438 \u0432\u0442\u043e\u0440\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u0438\u043d\u0430\u0447\u0435.<\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 clipp<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/muellan\/clipp\">clipp<\/a>:<\/p>\n<blockquote><p>clipp \u2014 command line interfaces for modern C++. Easy to use, powerful and expressive command line argument handling for C++11\/14\/17 contained in a single header file.<\/p><\/blockquote>\n<pre><code class=\"cpp\">inline bool fwd_to_unsigned_int(const char*&amp; s) {   if(!s) return false;   for(; std::isspace(*s); ++s);   if(!s[0] || s[0] == &#39;-&#39;) return false;   if(s[0] == &#39;-&#39;) return false;   return true; }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v547\/\">V547<\/a> Expression &#39;s[0] == &#39;-&#39;&#39; is always false. clipp.h 303<\/p>\n<p>  \u041d\u0443 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043c\u0438\u043d\u0443\u0441\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u0432\u0430\u0436\u0434\u044b.<\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 SimpleIni<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/brofield\/simpleini\">SimpleIni<\/a>:<\/p>\n<blockquote><p>A cross-platform library that provides a simple API to read and write INI-style configuration files. It supports data files in ASCII, MBCS and Unicode.<\/p><\/blockquote>\n<pre><code class=\"cpp\">#if defined(SI_NO_MBSTOWCS_NULL) || (!defined(_MSC_VER) &amp;&amp; !defined(_linux))<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v1040\/\">V1040<\/a> Possible typo in the spelling of a pre-defined macro name. The &#39;_linux&#39; macro is similar to &#39;__linux&#39;. SimpleIni.h 2923<\/p>\n<p>  \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432 \u0438\u043c\u0435\u043d\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 <i>_linux<\/i> \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u044f <i>__linux<\/i>. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0432 POSIX \u044d\u0442\u043e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c \u0438 \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <i>__linux__<\/i>.<\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 CSV Parser<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/vincentlaucsb\/csv-parser\">CSV Parser<\/a>:<\/p>\n<blockquote><p>A modern C++ library for reading, writing, and analyzing CSV (and similar) files.<\/p><\/blockquote>\n<pre><code class=\"cpp\">CSV_INLINE void CSVReader::read_csv(const size_t&amp; bytes) {   const size_t BUFFER_UPPER_LIMIT = std::min(bytes, (size_t)1000000);   std::unique_ptr&lt;char[]&gt; buffer(new char[BUFFER_UPPER_LIMIT]);   auto * HEDLEY_RESTRICT line_buffer = buffer.get();   line_buffer[0] = &#39;\\0&#39;;   ....   this-&gt;feed_state-&gt;feed_buffer.push_back(     std::make_pair&lt;&gt;(std::move(buffer), line_buffer - buffer.get())); \/\/ &lt;=   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v769\/\">V769<\/a> The &#39;buffer.get()&#39; pointer in the &#39;line_buffer \u2014 buffer.get()&#39; expression equals nullptr. The resulting value is senseless and it should not be used. csv.hpp 4957<\/p>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0448\u0443 \u043f\u0440\u043e \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0437\u0430\u043c\u0435\u0442\u043a\u0443. \u041f\u043b\u044e\u0441, \u0441\u0442\u0430\u0432\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u044f \u0432\u044b\u044f\u0432\u0438\u043b \u043d\u0435\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432 \u0441\u0430\u043c\u043e\u043c PVS-Studio :). \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043e\u043d \u043c\u043e\u043b\u0447\u0438\u0442, \u0445\u043e\u0442\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u0440\u0430\u0442\u043a\u043e, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0438\u043b\u0438 \u043d\u0435\u0442, \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0410 \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430.<\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 PPrint<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/p-ranav\/pprint\">PPrint<\/a>:.<\/p>\n<blockquote><p>Pretty Printer for Modern C++.<\/p><\/blockquote>\n<pre><code class=\"cpp\">template &lt;typename Container&gt; typename std::enable_if&lt;......&gt;::type print_internal(......) {   ....   for (size_t i = 1; i &lt; value.size() - 1; i++) {     print_internal(value[i], indent + indent_, &quot;&quot;, level + 1);     if (is_container&lt;T&gt;::value == false)       print_internal_without_quotes(&quot;, &quot;, 0, &quot;\\n&quot;);     else       print_internal_without_quotes(&quot;, &quot;, 0, &quot;\\n&quot;);   }   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v523\/\">V523<\/a> The &#39;then&#39; statement is equivalent to the &#39;else&#39; statement. pprint.hpp 715<\/p>\n<p>  \u041e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0447\u0442\u043e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u041d\u0435\u0442 \u0438 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u044f\u0441\u043d\u044f\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f. \u0412\u0441\u0451 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 Copy-Paste \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>V523 The &#39;then&#39; statement is equivalent to the &#39;else&#39; statement. pprint.hpp 780<\/li>\n<li>V523 The &#39;then&#39; statement is equivalent to the &#39;else&#39; statement. pprint.hpp 851<\/li>\n<li>V523 The &#39;then&#39; statement is equivalent to the &#39;else&#39; statement. pprint.hpp 927<\/li>\n<li>V523 The &#39;then&#39; statement is equivalent to the &#39;else&#39; statement. pprint.hpp 1012<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Strf<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/robhz786\/strf\">Strf<\/a>:<\/p>\n<blockquote><p>A fast C++ formatting library that supports encoding conversion.<\/p><\/blockquote>\n<p><b>\u041f\u0435\u0440\u0432\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">template &lt;int Base&gt; class numpunct: private strf::digits_grouping {   ....   constexpr STRF_HD numpunct&amp; operator=(const numpunct&amp; other) noexcept   {     strf::digits_grouping::operator=(other);     decimal_point_ = other.decimal_point_;     thousands_sep_ = other.thousands_sep_;   }   .... };<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v591\/\">V591<\/a> Non-void function should return a value. numpunct.hpp 402<\/p>\n<p>  \u0412 \u043a\u043e\u043d\u0446\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c &quot;return *this;&quot;.<\/p>\n<p>  <b>\u0412\u0442\u043e\u0440\u0430\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">template &lt;int Base&gt; class no_grouping final {   constexpr STRF_HD no_grouping&amp; operator=(const no_grouping&amp; other) noexcept   {     decimal_point_ = other.decimal_point_;   }   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v591\/\">V591<\/a> Non-void function should return a value. numpunct.hpp 528.<\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Indicators<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/p-ranav\/indicators\">Indicators<\/a>:<\/p>\n<blockquote><p>Activity Indicators for Modern C++.<\/p><\/blockquote>\n<pre><code class=\"cpp\">static inline void move_up(int lines) { move(0, -lines); } static inline void move_down(int lines) { move(0, -lines); }   \/\/ &lt;= static inline void move_right(int cols) { move(cols, 0); } static inline void move_left(int cols) { move(-cols, 0); }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v524\/\">V524<\/a> It is odd that the body of &#39;move_down&#39; function is fully equivalent to the body of &#39;move_up&#39; function. indicators.hpp 983<\/p>\n<p>  \u042f \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430. \u041d\u043e \u043a\u043e\u0434 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439. \u0412\u044b\u0441\u043e\u043a\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u0431\u044b\u043b\u0430 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <i>move_up<\/i> \u0438 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u043e \u0435\u0451 \u0438\u043c\u044f \u043d\u0430 <i>move_down<\/i>. \u0410 \u0432\u043e\u0442 \u043c\u0438\u043d\u0443\u0441 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0437\u0430\u0431\u044b\u043b\u0438. \u0421\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434.<\/p>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435.<\/b> \u0415\u0441\u043b\u0438 \u043a\u043e\u0434 \u0432\u0435\u0440\u0435\u043d, \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0432\u0432\u043e\u0434\u0438\u0442 \u0432 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u043a\u043e\u0434\u0430, \u043d\u043e \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0445\u043e\u0442\u044f\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434. \u041f\u043e\u043b\u0435\u0437\u043d\u043e \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438.<\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 manif<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/artivis\/manif\">manif<\/a>:<\/p>\n<blockquote><p>manif is a header-only C++11 Lie theory library for state-estimation targeted at robotics applications.<\/p><\/blockquote>\n<pre><code class=\"cpp\">template &lt;typename _Derived&gt; typename LieGroupBase&lt;_Derived&gt;::Scalar* LieGroupBase&lt;_Derived&gt;::data() {   return derived().coeffs().data(); }  template &lt;typename _Derived&gt; const typename LieGroupBase&lt;_Derived&gt;::Scalar* LieGroupBase&lt;_Derived&gt;::data() const {   derived().coeffs().data(); \/\/ &lt;= }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v591\/\">V591<\/a> Non-void function should return a value. lie_group_base.h 347<\/p>\n<p>  \u041d\u0435\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u0430\u044f \u2014 \u043d\u0435\u0442. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0434\u0430\u0436\u0435, \u043a\u0430\u043a \u0442\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c\u2026<\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 FakeIt<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/eranpeer\/FakeIt\">FakeIt<\/a>:<\/p>\n<blockquote><p>FakeIt is a simple mocking framework for C++. It supports GCC, Clang and MS Visual C++. FakeIt is written in C++11 and can be used for testing both C++11 and C++ projects.<\/p><\/blockquote>\n<pre><code class=\"cpp\">template&lt;typename ... arglist&gt; struct ArgumentsMatcherInvocationMatcher :          public ActualInvocation&lt;arglist...&gt;::Matcher {   ....   template&lt;typename A&gt;   void operator()(int index, A &amp;actualArg) {       TypedMatcher&lt;typename naked_type&lt;A&gt;::type&gt; *matcher =         dynamic_cast&lt;TypedMatcher&lt;typename naked_type&lt;A&gt;::type&gt; *&gt;(           _matchers[index]);       if (_matching)         _matching = matcher-&gt;matches(actualArg);   }   ....   const std::vector&lt;Destructible *&gt; _matchers; };<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v522\/\">V522<\/a> There might be dereferencing of a potential null pointer &#39;matcher&#39;. fakeit.hpp 6720<\/p>\n<p>  \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <i>matcher<\/i> \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>dynamic_cast<\/i>. \u0410 \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c <i>nullptr,<\/i> \u0438 \u044d\u0442\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439. \u0418\u043d\u0430\u0447\u0435 \u0432\u043c\u0435\u0441\u0442\u043e <i>dynamic_cast<\/i> \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <i>static_cast<\/i>. <\/p>\n<p>  \u0415\u0441\u0442\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e:<\/p>\n<pre><code class=\"cpp\">if (matcher)   _matching = matcher-&gt;matches(actualArg);<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 GuiLite<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/idea4good\/GuiLite\">GuiLite<\/a>:<\/p>\n<blockquote><p>The smallest header-only GUI library(4 KLOC) for all platforms.<\/p><\/blockquote>\n<pre><code class=\"cpp\">#define CORRECT(x, high_limit, low_limit)  {\\   x = (x &gt; high_limit) ? high_limit : x;\\   x = (x &lt; low_limit) ? low_limit : x;\\ }while(0)  void refresh_wave(unsigned char frame) {   ....   CORRECT(y_min, m_wave_bottom, m_wave_top);   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v529\/\">V529<\/a> Odd semicolon &#39;;&#39; after &#39;while&#39; operator. GuiLite.h 3413<\/p>\n<p>  \u041a \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u0435 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442. \u041d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0451 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>  \u0412 \u043c\u0430\u043a\u0440\u043e\u0441\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d <i>do {\u2026 } while(&#8230;.)<\/i>. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0432 \u043e\u0434\u043d\u043e\u043c \u0431\u043b\u043e\u043a\u0435 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u044b \u043f\u043e\u0441\u043b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 &#39;;&#39;, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u044d\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u041d\u043e \u0432 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0437\u0430\u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <i>do<\/i>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u0430\u043a\u0440\u043e\u0441 \u043a\u0430\u043a-\u0431\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438. \u041f\u0435\u0440\u0432\u0430\u044f \u2014 \u044d\u0442\u043e \u0431\u043b\u043e\u043a. \u0412\u0442\u043e\u0440\u0430\u044f \u2014 \u043f\u0443\u0441\u0442\u043e\u0439 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0446\u0438\u043a\u043b: <i>while (0);<\/i>.<\/p>\n<p>  \u0410 \u0432 \u0447\u0451\u043c, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430?<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u043e\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432\u0438\u0434\u0430:<\/p>\n<pre><code class=\"cpp\">if (A)   CORRECT(y_min, m_wave_bottom, m_wave_top); else   Foo();<\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043a\u0440\u044b\u0442 \u0432:<\/p>\n<pre><code class=\"cpp\">if (A)   { ..... } while(0); else   Foo();<\/code><\/pre>\n<p>  \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u0442\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043b\u0443\u0447\u0448\u0435 \u043d\u0430\u0439\u0442\u0438 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0430 \u043d\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u0434\u0430 :).<\/p>\n<p>  <a href=\"https:\/\/viva64.com\/ru\/pvs-studio-download\/?utm_source=habr&amp;utm_medium=banner&amp;utm_campaign=0770_check_awesome_hpp_ru\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/04b\/0d5\/022\/04b0d5022b3a6cfadc4732dce7842da7.png\"><\/div>\n<p><\/a>  <\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 PpluX<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/pplux\/px\">PpluX<\/a>:<\/p>\n<blockquote><p>Single header C++ Libraries for Thread Scheduling, Rendering, and so on&#8230;<\/p><\/blockquote>\n<pre><code class=\"cpp\">struct DisplayList {   DisplayList&amp; operator=(DisplayList &amp;&amp;d) {     data_ = d.data_;     d.data_ = nullptr;   }   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v591\/\">V591<\/a> Non-void function should return a value. px_render.h 398<\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Universal<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Universal:<\/p>\n<blockquote><p>The goal of Universal Numbers, or unums, is to replace IEEE floating-point with a number system that is more efficient and mathematically consistent in concurrent execution environments.<\/p><\/blockquote>\n<p><b>\u041f\u0435\u0440\u0432\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">template&lt;typename Scalar&gt; vector&lt;Scalar&gt; operator*(double scalar, const vector&lt;Scalar&gt;&amp; v) {   vector&lt;Scalar&gt; scaledVector(v);   scaledVector *= scalar;   return v; }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v1001\/\">V1001<\/a> The &#39;scaledVector&#39; variable is assigned but is not used by the end of the function. vector.hpp 124<\/p>\n<p>  \u041e\u043f\u0435\u0447\u0430\u0442\u043a\u0430. \u0412\u043c\u0435\u0441\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 <i>v<\/i> \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 <i>scaledVector<\/i>.<\/p>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0443\u044e \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0437\u0434\u0435\u0441\u044c: V1001 The &#39;normalizedVector&#39; variable is assigned but is not used by the end of the function. vector.hpp 131<\/p>\n<p>  <b>\u0412\u0442\u043e\u0440\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">template&lt;typename Scalar&gt; class matrix {   ....   matrix&amp; diagonal() {   }   .... };<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v591\/\">V591<\/a> Non-void function should return a value. matrix.hpp 109<\/p>\n<p>  <b>\u0422\u0440\u0435\u0442\u044c\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">template&lt;size_t fbits, size_t abits&gt; void module_subtract_BROKEN(   const value&lt;fbits&gt;&amp; lhs, const value&lt;fbits&gt;&amp; rhs, value&lt;abits + 1&gt;&amp; result) {   if (lhs.isinf() || rhs.isinf()) {     result.setinf();     return;   }   int lhs_scale = lhs.scale(),       rhs_scale = rhs.scale(),       scale_of_result = std::max(lhs_scale, rhs_scale);    \/\/ align the fractions   bitblock&lt;abits&gt; r1 =     lhs.template nshift&lt;abits&gt;(lhs_scale - scale_of_result + 3);   bitblock&lt;abits&gt; r2 =     rhs.template nshift&lt;abits&gt;(rhs_scale - scale_of_result + 3);   bool r1_sign = lhs.sign(), r2_sign = rhs.sign();   \/\/bool signs_are_equal = r1_sign == r2_sign;    if (r1_sign) r1 = twos_complement(r1);   if (r1_sign) r2 = twos_complement(r2);  \/\/ &lt;=    .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v581\/\">V581<\/a> The conditional expressions of the &#39;if&#39; statements situated alongside each other are identical. Check lines: 789, 790. value.hpp 790<\/p>\n<p>  \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0430\u044f \u0438\u0437-\u0437\u0430 Copy-Paste. \u0412\u0437\u044f\u043b\u0438 \u0438 \u0440\u0430\u0437\u043c\u043d\u043e\u0436\u0438\u043b\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0443:<\/p>\n<pre><code class=\"cpp\">if (r1_sign) r1 = twos_complement(r1);<\/code><\/pre>\n<p>  \u041f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u0432 \u043d\u0435\u0439 <i>r1<\/i> \u043d\u0430 <i>r2<\/i>:<\/p>\n<pre><code class=\"cpp\">if (r1_sign) r2 = twos_complement(r2);<\/code><\/pre>\n<p>  \u0410 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c <i>r1_sign<\/i> \u0437\u0430\u0431\u044b\u043b\u0438. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442:<\/p>\n<pre><code class=\"cpp\">if (r2_sign) r2 = twos_complement(r2);<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Chobo Single-Header Libraries<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/Chobolabs\/chobo-shl\">Chobo Single-Header Libraries<\/a>:<\/p>\n<blockquote><p>A collection of small single-header C++11 libraries by Chobolabs.<\/p><\/blockquote>\n<p><b>\u041f\u0435\u0440\u0432\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">template &lt;typename T, typename U, typename Alloc = std::allocator&lt;T&gt;&gt; class vector_view {   ....   vector_view&amp; operator=(vector_view&amp;&amp; other)   {     m_vector = std::move(other.m_vector);   }   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v591\/\">V591<\/a> Non-void function should return a value. vector_view.hpp 163<\/p>\n<p>  <b>\u0412\u0442\u043e\u0440\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">template &lt;typename UAlloc&gt; vector_view&amp; operator=(const std::vector&lt;U, UAlloc&gt;&amp; other) {   size_type n = other.size();   resize(n);   for (size_type i = 0; i &lt; n; ++i)   {     this-&gt;at(i) = other[i];   } }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v591\/\">V591<\/a> Non-void function should return a value. vector_view.hpp 184<\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 PGM-index<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/gvinciguerra\/PGM-index\">PGM-index<\/a>:<\/p>\n<blockquote><p>The Piecewise Geometric Model index (PGM-index) is a data structure that enables fast lookup, predecessor, range searches and updates in arrays of billions of items using orders of magnitude less space than traditional indexes while providing the same worst-case query time guarantees.<\/p><\/blockquote>\n<p><b>\u041f\u0435\u0440\u0432\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">char* str_from_errno() { #ifdef MSVC_COMPILER   #pragma warning(disable:4996)   return strerror(errno); #pragma warning(default:4996) #else   return strerror(errno); #endif }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v665\/\">V665<\/a> Possibly, the usage of &#39;#pragma warning(default: X)&#39; is incorrect in this context. The &#39;#pragma warning(push\/pop)&#39; should be used instead. Check lines: 9170, 9172. sdsl.hpp 9172<\/p>\n<p>  \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043d\u0435\u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u0438 \u0435\u0449\u0451 \u043a\u0430\u043a-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c\u0443 \u043a\u043e\u0434\u0443. \u041d\u043e \u044d\u0442\u043e \u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e \u0432 header-only \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445.<\/p>\n<p>  <b>\u0412\u0442\u043e\u0440\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">template&lt;class t_int_vec&gt; t_int_vec rnd_positions(uint8_t log_s, uint64_t&amp; mask,                         uint64_t mod=0, uint64_t seed=17) {   mask = (1&lt;&lt;log_s)-1;         \/\/ &lt;=   t_int_vec rands(1&lt;&lt;log_s ,0);   set_random_bits(rands, seed);   if (mod &gt; 0) {     util::mod(rands, mod);   }   return rands; }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v629\/\">V629<\/a> Consider inspecting the &#39;1 &lt;&lt; log_s&#39; expression. Bit shifting of the 32-bit value with a subsequent expansion to the 64-bit type. sdsl.hpp 1350<\/p>\n<p>  \u041e\u0434\u0438\u043d \u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">mask = ((uint64_t)(1)&lt;&lt;log_s)-1;<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Hnswlib<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/nmslib\/hnswlib\">Hnswlib<\/a>:<\/p>\n<blockquote><p>Header-only C++ HNSW implementation with python bindings. Paper&#39;s code for the HNSW 200M SIFT experiment.<\/p><\/blockquote>\n<pre><code class=\"cpp\">template&lt;typename dist_t&gt; class BruteforceSearch : public AlgorithmInterface&lt;dist_t&gt; { public:   BruteforceSearch(SpaceInterface &lt;dist_t&gt; *s, size_t maxElements) {     maxelements_ = maxElements;     data_size_ = s-&gt;get_data_size();     fstdistfunc_ = s-&gt;get_dist_func();     dist_func_param_ = s-&gt;get_dist_func_param();     size_per_element_ = data_size_ + sizeof(labeltype);     data_ = (char *) malloc(maxElements * size_per_element_);     if (data_ == nullptr)       std::runtime_error(         &quot;Not enough memory: BruteforceSearch failed to allocate data&quot;);     cur_element_count = 0;   }   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v596\/\">V596<\/a> The object was created but it is not being used. The &#39;throw&#39; keyword could be missing: throw runtime_error(FOO); bruteforce.h 26<\/p>\n<p>  \u0417\u0430\u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u0434 <i>std::runtime_error<\/i> \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>throw<\/i>.<\/p>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v596\/\">V596<\/a> The object was created but it is not being used. The &#39;throw&#39; keyword could be missing: throw runtime_error(FOO); bruteforce.h 161<\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 tiny-dnn<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/tiny-dnn\/tiny-dnn\">tiny-dnn<\/a>:<\/p>\n<blockquote><p>tiny-dnn is a C++14 implementation of deep learning. It is suitable for deep learning on limited computational resource, embedded systems and IoT devices.<\/p><\/blockquote>\n<p><b>\u041f\u0435\u0440\u0432\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">class nn_error : public std::exception {  public:   explicit nn_error(const std::string &amp;msg) : msg_(msg) {}   const char *what() const throw() override { return msg_.c_str(); }   private:   std::string msg_; };  inline Device::Device(device_t type, const int platform_id, const int device_id)   : type_(type),     has_clcuda_api_(true),     platform_id_(platform_id),     device_id_(device_id) {   .... #else   nn_error(&quot;TinyDNN has not been compiled with OpenCL or CUDA support.&quot;); #endif }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v596\/\">V596<\/a> The object was created but it is not being used. The &#39;throw&#39; keyword could be missing: throw nn_error(FOO); device.h 68<\/p>\n<p>  <i>nn_error<\/i> \u2014 \u044d\u0442\u043e \u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043b\u0430\u0441\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">throw nn_error(&quot;TinyDNN has not been compiled with OpenCL or CUDA support.&quot;);<\/code><\/pre>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430: V596 The object was created but it is not being used. The &#39;throw&#39; keyword could be missing: throw nn_error(FOO); conv2d_op_opencl.h 136<\/p>\n<p>  <b>\u0412\u0442\u043e\u0440\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">inline std::string format_str(const char *fmt, ...) {   static char buf[2048];  #ifdef _MSC_VER #pragma warning(disable : 4996) #endif   va_list args;   va_start(args, fmt);   vsnprintf(buf, sizeof(buf), fmt, args);   va_end(args); #ifdef _MSC_VER #pragma warning(default : 4996) #endif   return std::string(buf); }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v665\/\">V665<\/a> Possibly, the usage of &#39;#pragma warning(default: X)&#39; is incorrect in this context. The &#39;#pragma warning(push\/pop)&#39; should be used instead. Check lines: 139, 146. util.h 146<\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Dlib<\/h3>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/tdlib\/td\">Dlib<\/a>:<\/p>\n<blockquote><p>TDLib (Telegram Database library) is a cross-platform library for building Telegram clients. It can be easily used from almost any programming language.<\/p><\/blockquote>\n<p><b>\u041f\u0435\u0440\u0432\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<p>  \u0420\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<pre><code class=\"cpp\">class bdf_parser { public:    enum bdf_enums   {     NO_KEYWORD = 0,     STARTFONT = 1,     FONTBOUNDINGBOX = 2,     DWIDTH = 4,     DEFAULT_CHAR = 8,     CHARS = 16,     STARTCHAR = 32,     ENCODING = 64,     BBX = 128,     BITMAP = 256,     ENDCHAR = 512,     ENDFONT = 1024   };   ....   bool parse_header( header_info&amp; info )   {     ....     while ( 1 )     {       res = find_keywords( find | stop );       if ( res &amp; FONTBOUNDINGBOX )       {           in_ &gt;&gt; info.FBBx &gt;&gt; info.FBBy &gt;&gt; info.Xoff &gt;&gt; info.Yoff;           if ( in_.fail() )               return false;    \/\/ parse_error           find &amp;= ~FONTBOUNDINGBOX;           continue;       }       if ( res &amp; DWIDTH )       {           in_ &gt;&gt; info.dwx0 &gt;&gt; info.dwy0;           if ( in_.fail() )               return false;    \/\/ parse_error           find &amp;= ~DWIDTH;           info.has_global_dw = true;           continue;       }       if ( res &amp; DEFAULT_CHAR )       {           in_ &gt;&gt; info.default_char;           if ( in_.fail() )               return false;    \/\/ parse_error           find &amp;= ~DEFAULT_CHAR;           continue;       }       if ( res &amp; NO_KEYWORD )           return false;    \/\/ parse_error: unexpected EOF       break;     }   .... };<\/code><\/pre>\n<p>  \u041d\u0430\u0448\u043b\u0438?<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d90\/7c0\/3c7\/d907c03c7735437aa5447be2729dcad3.png\" alt=\"\u0420\u0430\u0441\u0442\u0435\u0440\u044f\u043d\u043d\u044b\u0439 \u0422\u0440\u0430\u0432\u043e\u043b\u0442\u0430-\u0415\u0434\u0438\u043d\u043e\u0440\u043e\u0433\"><\/div>\n<p>  \u041e\u043d\u0430 \u0437\u0434\u0435\u0441\u044c:<\/p>\n<pre><code class=\"cpp\">if ( res &amp; NO_KEYWORD )<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v616\/\">V616<\/a> The &#39;NO_KEYWORD&#39; named constant with the value of 0 is used in the bitwise operation. fonts.cpp 288<\/p>\n<p>  \u0418\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 <i>NO_KEYWORD<\/i> \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0. \u0410 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">if ( res == NO_KEYWORD )<\/code><\/pre>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c: V616 The &#39;NO_KEYWORD&#39; named constant with the value of 0 is used in the bitwise operation. fonts.cpp 334<\/p>\n<p>  <b>\u0412\u0442\u043e\u0440\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">void set(std::vector&lt;tensor*&gt; items) {   ....   epa.emplace_back(new enable_peer_access(*g[0], *g[i]));   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v1023\/\">V1023<\/a> A pointer without owner is added to the &#39;epa&#39; container by the &#39;emplace_back&#39; method. A memory leak will occur in case of an exception. tensor_tools.h 1665<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0432 \u0447\u0451\u043c \u0442\u0443\u0442 \u0437\u0430\u043a\u043e\u0432\u044b\u043a\u0430, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0443 <a href=\"https:\/\/www.viva64.com\/ru\/w\/v1023\/\">V1023<\/a>.<\/p>\n<p>  <b>\u0422\u0440\u0435\u0442\u044c\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">template &lt;     typename detection_type,      typename label_type      &gt; bool is_track_association_problem (   const std::vector&lt;     std::vector&lt;labeled_detection&lt;detection_type,label_type&gt; &gt; &gt;&amp; samples ) {   if (samples.size() == 0)     return false;    unsigned long num_nonzero_elements = 0;   for (unsigned long i = 0; i &lt; samples.size(); ++i)   {     if (samples.size() &gt; 0)       ++num_nonzero_elements;   }   if (num_nonzero_elements &lt; 2)     return false;   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v547\/\">V547<\/a> Expression &#39;samples.size() &gt; 0&#39; is always true. svm.h 360<\/p>\n<p>  \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c, \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434! \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b, \u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 <i>(samples.size() &gt; 0)<\/i> \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u0442\u0438\u043d\u043d\u043e. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0446\u0438\u043a\u043b \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">for (unsigned long i = 0; i &lt; samples.size(); ++i) {   ++num_nonzero_elements; }<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0446\u0438\u043a\u043b \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d. \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">unsigned long num_nonzero_elements = samples.size();<\/code><\/pre>\n<p>  \u041d\u043e \u044d\u0442\u043e \u043b\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c? \u041a\u043e\u0434 \u044f\u0432\u043d\u043e \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c.<\/p>\n<p>  <b>\u0427\u0435\u0442\u0432\u0451\u0440\u0442\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">class console_progress_indicator {   ....   double seen_first_val;   .... };  bool console_progress_indicator::print_status (   double cur, bool always_print) {   ....   if (!seen_first_val)   {     start_time = cur_time;     last_time = cur_time;     first_val = cur;     seen_first_val = true;  \/\/ &lt;=     return false;   }   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v601\/\">V601<\/a> The bool type is implicitly cast to the double type. console_progress_indicator.h 136<\/p>\n<p>  \u0412 \u0447\u043b\u0435\u043d \u043a\u043b\u0430\u0441\u0441\u0430, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0442\u0438\u043f <i>double<\/i>, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>true<\/i>. \u0425\u043c\u2026<\/p>\n<p>  <b>\u041f\u044f\u0442\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<pre><code class=\"cpp\">void file::init(const std::string&amp; name) {   ....   WIN32_FIND_DATAA data;   HANDLE ffind = FindFirstFileA(state.full_name.c_str(), &amp;data);   if (ffind == INVALID_HANDLE_VALUE ||       (data.dwFileAttributes&amp;FILE_ATTRIBUTE_DIRECTORY) != 0)   {     throw file_not_found(&quot;Unable to find file &quot; + name);                   }   else   {     ....   }  }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v773\/\">V773<\/a> The exception was thrown without closing the file referenced by the &#39;ffind&#39; handle. A resource leak is possible. dir_nav_kernel_1.cpp 60<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041d\u043e \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440?<\/p>\n<p>  <b>\u0428\u0435\u0441\u0442\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/b><\/p>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e.<\/p>\n<pre><code class=\"cpp\">inline double poly_min_extrap(double f0, double d0,                               double x1, double f_x1,                               double x2, double f_x2) {   ....   matrix&lt;double,2,2&gt; m;   matrix&lt;double,2,1&gt; v;    const double aa2 = x2*x2;   const double aa1 = x1*x1;   m =  aa2,       -aa1,       -aa2*x2, aa1*x1;      v = f_x1 - f0 - d0*x1,       f_x2 - f0 - d0*x2;   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v521\/\">V521<\/a> Such expressions using the &#39;,&#39; operator are dangerous. Make sure the expression is correct. optimization_line_search.h 211<\/p>\n<p>  \u041f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u044b. \u041d\u043e \u0432\u0435\u0434\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 <i>aa2<\/i>, <i>f_x1<\/i>, <i>d0<\/i> \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u0430 <i>double<\/i>. \u0417\u043d\u0430\u0447\u0438\u0442, \u0437\u0430\u043f\u044f\u0442\u044b\u0435 \u043d\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0430\u0442\u0440\u0438\u0446, \u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044b\u043a\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u043c\u0438 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Comma_operator\">comma operator<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u0440\u0438\u0432\u0451\u043b \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0435\u043b \u0441\u0440\u0430\u0437\u0443. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0442\u043e\u0436\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c:<\/p>\n<ul>\n<li>\u041f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0418\u0437\u0443\u0447\u0430\u044f \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e. \u041f\u0440\u0438\u043c\u0435\u0440\u044b: <a href=\"https:\/\/www.viva64.com\/ru\/w\/v597\/\">memset<\/a>, <a href=\"https:\/\/www.viva64.com\/ru\/w\/v665\/\">#pragma warning<\/a>, <a href=\"https:\/\/www.viva64.com\/ru\/w\/v1023\/\">emplace_back<\/a>, <a href=\"https:\/\/www.viva64.com\/ru\/w\/v1032\/\">strictly aligned<\/a>.<\/li>\n<li>\u0412\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0447\u0430\u0442\u043e\u043a, \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043d\u0430 \u0440\u0430\u043d\u043d\u0438\u0445 \u044d\u0442\u0430\u043f\u0430\u0445. <\/li>\n<li>\u041a\u043e\u0434 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0435\u0435, \u043f\u0440\u043e\u0449\u0435, \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0439.<\/li>\n<li>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0433\u043e\u0440\u0434\u0438\u0442\u044c\u0441\u044f \u0438 \u0432\u0441\u0435\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 :). \u0418 \u044d\u0442\u043e \u044e\u043c\u043e\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0447\u0430\u0441\u0442\u0438. \u042d\u0442\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e.<\/li>\n<\/ul>\n<p>  \u0412\u043e\u043f\u0440\u043e\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c, \u043a\u0430\u043a \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0438 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c? \u0421 \u044d\u0442\u0438\u043c \u0432\u0430\u043c \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/b\/0633\/\">\u041a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0434\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio \u0434\u043b\u044f C \u0438 C++ \u043a\u043e\u0434\u0430?<\/a><\/li>\n<li><a href=\"https:\/\/www.viva64.com\/ru\/b\/0743\/\">\u041a\u0430\u043a \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 \u0432 legacy \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043d\u0435 \u0434\u0435\u043c\u043e\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443<\/a>.<\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/436868\/\">\u0412\u043d\u0435\u0434\u0440\u044f\u0439\u0442\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0430 \u043d\u0435 \u0438\u0449\u0438\u0442\u0435 \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0430\u0433\u0438<\/a>.<\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/524560\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/d5\/1k\/2e\/d51k2edrgxyrg5voswox_46pg3o.png\"><\/div>\n<p><\/a><br \/>  \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439, \u0442\u043e \u043f\u0440\u043e\u0448\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434: Andrey Karpov. <a href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/524560\/\">Checking a Header-Only C++ Library Collection (awesome-hpp)<\/a>.<\/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\/company\/pvs-studio\/blog\/524568\/\"> https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/524568\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/141\/300\/658\/141300658daf1fe0d2203c866e74a463.png\" alt=\"PVS-Studio \u0438 Awesome hpp\"><\/div>\n<p>  \u0412\u043e\u043b\u0435\u044e \u0441\u0443\u0434\u044c\u0431\u044b \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c &quot;Awesome hpp&quot;. \u042d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C++, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u041d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0434\u044b, \u0435\u0441\u043b\u0438 \u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u044b \u043d\u0430\u0447\u043d\u0443\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio \u043d\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435.  <\/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-311846","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/311846","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=311846"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/311846\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=311846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=311846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=311846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}