{"id":2857,"date":"2017-03-13T14:00:13","date_gmt":"2017-03-13T13:00:13","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?page_id=2857"},"modified":"2017-03-13T15:08:27","modified_gmt":"2017-03-13T14:08:27","slug":"fun-with-c-syntax","status":"publish","type":"page","link":"http:\/\/roboblog.fatal-fury.de\/?page_id=2857","title":{"rendered":"Fun with C++ syntax"},"content":{"rendered":"<p>Der Code compiliert wirklich ;)<\/p>\n<pre><code>\r\nconstexpr Human o_0{Getraenke::KAFFEE, Essen::Gurkensalat};\r\nstatic_assert(not mix(o_0.getraenk, o_0.essen));\r\nstatic_assert(not is_convertible&ltGetraenke, Essen>());\r\nstatic_assert(not mix(Getraenke::KAFFEE, Essen::Gurkensalat));\r\n<\/code><\/pre>\n<p>Background noise:<\/p>\n<pre><code>\r\n#include &lttype_traits>\r\n#include &ltcassert>\r\nusing namespace std;\r\n \r\n enum class Getraenke { NICHTS, KAFFEE };\r\n enum class Lieferdienst { VOID };\r\n enum class Essen { Gurkensalat };\r\n\r\n struct Human {\r\n   Getraenke getraenk;\r\n   Essen essen;\r\n   Lieferdienst lieferdienst;\r\n };\r\n \r\n \/\/ Niemals Kaffee mit irgendwas mischen\r\n template&ltclass T1>\r\n constexpr inline\r\n auto KAFFEEMixX(T1 x) {\r\n   return false;\r\n }\r\n \r\n \/\/ Nur Kaffee mit ausgewaehlte Getraenke mischen\r\n template&lt>\r\n constexpr inline\r\n auto KAFFEEMixX&ltEssen>(Essen essen) {\r\n   switch(essen) {\r\n     case Essen::Gurkensalat: return false;\r\n     default: return false;\r\n   }\r\n }\r\n \r\n \/\/ Niemals irgendwas mit irgendwas vermischen\r\n template&ltclass T1, class T2>\r\n constexpr inline\r\n auto mix(T1 x, T2 y) {\r\n   return false;\r\n }\r\n \r\n \/\/ Nur Ausgewaehlte Getraenke und Essen mischen\r\n template&lt>\r\n constexpr inline\r\n auto mix<Getraenke, Essen>(Getraenke getraenk, Essen essen) {\r\n   switch(getraenk) {\r\n     case Getraenke::KAFFEE: return KAFFEEMixX(essen);\r\n     default: return false;\r\n   };\r\n }\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Der Code compiliert wirklich ;) constexpr Human o_0{Getraenke::KAFFEE, Essen::Gurkensalat}; static_assert(not mix(o_0.getraenk, o_0.essen)); static_assert(not is_convertible&#038;ltGetraenke, Essen>()); static_assert(not mix(Getraenke::KAFFEE, Essen::Gurkensalat)); Background noise: #include &#038;lttype_traits> #include &#038;ltcassert> using namespace std; enum class Getraenke { NICHTS, KAFFEE }; enum class Lieferdienst { VOID }; enum class Essen { Gurkensalat }; struct Human { Getraenke getraenk; Essen essen; Lieferdienst lieferdienst; [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2857","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/pages\/2857","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2857"}],"version-history":[{"count":5,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/pages\/2857\/revisions"}],"predecessor-version":[{"id":2862,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/pages\/2857\/revisions\/2862"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2857"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}