<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Das ist lustig!]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;int a&gt;struct f{enum{v=f&lt;a-1&gt;::v+a};};
f&lt;0&gt; x;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/136161/das-ist-lustig</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 11:18:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/136161.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 Feb 2006 20:28:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Das ist lustig! on Tue, 07 Feb 2006 20:28:31 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;int a&gt;struct f{enum{v=f&lt;a-1&gt;::v+a};};
f&lt;0&gt; x;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/988940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/988940</guid><dc:creator><![CDATA[Das ist lustig!]]></dc:creator><pubDate>Tue, 07 Feb 2006 20:28:31 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Tue, 07 Feb 2006 20:32:35 GMT]]></title><description><![CDATA[<p>Ich weiß nich warum , aber Irgentwie versteh ich den Witz nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/988948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/988948</guid><dc:creator><![CDATA[Xclear]]></dc:creator><pubDate>Tue, 07 Feb 2006 20:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Tue, 07 Feb 2006 20:36:11 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> das ist ein Quersummen Hack - Spitzenklasse <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>@Moderator: bitte löschen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/988953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/988953</guid><dc:creator><![CDATA[Vertexwahn]]></dc:creator><pubDate>Tue, 07 Feb 2006 20:36:11 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Wed, 08 Feb 2006 07:08:43 GMT]]></title><description><![CDATA[<p>Vertexwahn schrieb:</p>
<blockquote>
<p>@Moderator: bitte löschen</p>
</blockquote>
<p>warum? Ist das verboten? Oder wird's nur nich gerne gesehen?</p>
<p>@Das ist lustig: copy &amp; past?? Oder kannste das mal erklären? Würd mich ja mal interessieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/989090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/989090</guid><dc:creator><![CDATA[Cyriz]]></dc:creator><pubDate>Wed, 08 Feb 2006 07:08:43 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Wed, 08 Feb 2006 08:15:25 GMT]]></title><description><![CDATA[<p>Vertexwahn schrieb:</p>
<blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> das ist ein Quersummen Hack - Spitzenklasse <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>@Moderator: bitte löschen</p>
</blockquote>
<p>Eigentlich sehe ich auch keinen Grund warum das gelöscht werden sollte. Und als Hack muss man das auch nicht bezeichnen ausser das man anstatt dem enum vielleicht ein static int const v nehmen würde.</p>
<p>Der &quot;Hack&quot; schreit sich btw auch nicht &quot;Hack&quot; sondern Template Metaprogrammierung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<pre><code class="language-cpp">template&lt; int N &gt;
  struct cross_sum
  {
     static int const value = cross_sum&lt;N-1&gt;::value + N;
  };

template&lt;&gt;
  struct cross_sum&lt;0&gt;
  {
     static int const value = 0;
  };
</code></pre>
<p>Bei dem Beispiel hat aber die Endbedingung ( Spezialisierung für 0 ) gefehlt.</p>
<p>Nun das ganze funktioniert folgendermaßen:</p>
<p>Man ruft das struct so auf:</p>
<pre><code class="language-cpp">int result = cross_sum&lt;10&gt;::value;
</code></pre>
<p>der compiler ruft dann cross_sum&lt;10&gt;::value auf, das wiederrum ruft cross_sum&lt;9&gt;::value auf usw bis cross_sum&lt;0&gt;::value aufgerufen wird. Hier stoppt die rekursion dann und es wird nur 0 zurück gegeben.</p>
<p>Zum Schluss hat man dann eben das ergebnis 55 welches der Compiler einem schon beim kompilieren errechnet hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt; int N &gt;
  struct cross_sum
  {
     static int const value = cross_sum&lt;N-1&gt;::value + N;
  };

template&lt;&gt;
  struct cross_sum&lt;0&gt;
  {
     static int const value = 0;
  };

int main() 
{
   std::cout &lt;&lt; cross_sum&lt;10&gt;::value &lt;&lt; std::endl;
}
</code></pre>
<p>Output: 55</p>
<p>BR<br />
evilissimo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/989109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/989109</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Wed, 08 Feb 2006 08:15:25 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Wed, 08 Feb 2006 08:22:45 GMT]]></title><description><![CDATA[<p>Wie kommt ihr eigentlich darauf, dass das 'ne Quersumme ist? Das ist eine Summation der ersten N natürlichen Zahlen, also eine umständliche Berechnung von N(N+1)/2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/989119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/989119</guid><dc:creator><![CDATA[Walli]]></dc:creator><pubDate>Wed, 08 Feb 2006 08:22:45 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Wed, 08 Feb 2006 08:25:55 GMT]]></title><description><![CDATA[<p>und ich dachte die quersumme von 10 wäre 1 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/989123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/989123</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Wed, 08 Feb 2006 08:25:55 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Wed, 08 Feb 2006 08:27:31 GMT]]></title><description><![CDATA[<p>Und hier noch ein kleines Beispiel</p>
<p>Als Template Metaprogramm welches zur Zeit des Compilierens berechnet wird:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt; unsigned  N &gt;
  struct binary
  {
     static unsigned const value = binary&lt;N/10&gt;::value * 2 + N % 10;
  };

template&lt;&gt;
  struct binary&lt;0&gt;
  {
     static unsigned const value = 0;       
  };

int main() 
{
   std::cout &lt;&lt; binary&lt;101010&gt;::value &lt;&lt; std::endl;
}
</code></pre>
<p>Und einmal das ganze zur Laufzeit im vergleich dazu:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

unsigned binary( unsigned N )
{
   return N == 0 ? 0 : N % 10 + binary(N/10) * 2;
}

int main() 
{
   std::cout &lt;&lt; binary(101010) &lt;&lt; std::endl;
}
</code></pre>
<p>Das Beispiel ist aus dem Buch:<br />
<a href="https://duckduckgo.com/?q=isbn+0321227255&amp;cppnetbooks" rel="nofollow">C++ Template Metaprogramming | ISBN: 0321227255</a></p>
<p>BR</p>
<p>evilissimo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/989124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/989124</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Wed, 08 Feb 2006 08:27:31 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Wed, 08 Feb 2006 08:29:25 GMT]]></title><description><![CDATA[<p>Walli schrieb:</p>
<blockquote>
<p>Wie kommt ihr eigentlich darauf, dass das 'ne Quersumme ist? Das ist eine Summation der ersten N natürlichen Zahlen, also eine umständliche Berechnung von N(N+1)/2.</p>
</blockquote>
<p>stimmt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ich habs verpeilt. hab mich mit der bezeichnung quersumme darauf verlassen das es richtig ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Ändert aber nix an der funktionsweise.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/989125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/989125</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Wed, 08 Feb 2006 08:29:25 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Wed, 08 Feb 2006 08:42:56 GMT]]></title><description><![CDATA[<p>evilissimo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt; int N &gt;
  struct cross_sum
  {
     static int const value = cross_sum&lt;N-1&gt;::value + N;
  };

template&lt;&gt;
  struct cross_sum&lt;0&gt;
  {
     static int const value = 0;
  };
</code></pre>
</blockquote>
<p>da sollte man besser unsigned nehmen.<br />
cross_summe&lt;-1&gt; ist sonst problematisch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/989130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/989130</guid><dc:creator><![CDATA[b7f7]]></dc:creator><pubDate>Wed, 08 Feb 2006 08:42:56 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Wed, 08 Feb 2006 11:48:33 GMT]]></title><description><![CDATA[<p>Eigentlich meinte ich dass es lustig ist das zu compilieren. Die verschiedenen Compiler reagieren da sehr toll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/989253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/989253</guid><dc:creator><![CDATA[Das ist lustig!]]></dc:creator><pubDate>Wed, 08 Feb 2006 11:48:33 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Wed, 08 Feb 2006 11:54:57 GMT]]></title><description><![CDATA[<p>evilissimo schrieb:</p>
<blockquote>
<p>Vertexwahn schrieb:</p>
<blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> das ist ein Quersummen Hack - Spitzenklasse <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>@Moderator: bitte löschen</p>
</blockquote>
<p>Eigentlich sehe ich auch keinen Grund warum das gelöscht werden sollte. Und als Hack muss man das auch nicht bezeichnen ausser das man anstatt dem enum vielleicht ein static int const v nehmen würde.</p>
</blockquote>
<p>was ist der vorteil gegenüber enum? ich nehm für sowas bisher auch immer enums... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/989256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/989256</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Wed, 08 Feb 2006 11:54:57 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Wed, 08 Feb 2006 17:51:50 GMT]]></title><description><![CDATA[<p>@Das ist lustig: Das könnte daran liegen, dass das Template keine Abbruchbedingung spezialisiert.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1029">@rapso</a>: erstens sind enums nicht für diesen Einsatz gedacht (ich weiß, schwaches Argument), zweitens schränken sie die möglichen Werte eines Metaalgorithmus' unnötig ein (z.B. kann enum iirc nicht negativ sein). Es gab noch einen besseren und einleuchtenderen Grund, der ist mir aber wohl entfallen.</p>
<p>BTW, Quersumme sieht als Metaprogramm so aus, wer den subtilen Unterschied findet und begreift darf sich freuen, dass er die Grundlagen der Numerik beherrscht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> :</p>
<pre><code class="language-cpp">template &lt;int zahl&gt;
struct quersumme
{
    static const unsigned value = zahl % 10 + quersumme&lt;zahl / 10&gt;::value;
};

template &lt;&gt;
struct quersumme&lt;0&gt;
{
    static const unsigned value = 0;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/989525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/989525</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 08 Feb 2006 17:51:50 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Wed, 08 Feb 2006 17:31:33 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>@Das ist lustig: Das könnte daran liegen, dass das Template keine Abbruchbedingung spezialisiert.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1029">@rapso</a>: erstens sind enums nicht für diesen Einsatz gedacht (ich weiß, schwaches Argument), zweitens schränken sie die möglichen Werte eines Metaalgorithmus' unnötig ein (z.B. kann enum iirc nicht negativ sein). Es gab noch einen besseren und einleuchtenderen Grund, der ist mir aber wohl entfallen.</p>
<p>BTW, Quersumme sieht als Metaprogramm so aus, wer den subtilen Unterschied findet und begreift darf sich freuen, dass er die Grundlagen der Numerik beherrscht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> :</p>
<pre><code class="language-cpp">template &lt;int zahl&gt;
struct quersumme
{
    static const unsigned value = zahl % 10 + quersumme&lt;zahl / 10&gt;::value;
};

template &lt;&gt;
struct quersumme
{
    static const unsigned value = 0;
};
</code></pre>
</blockquote>
<p>deine Spezialisierung ist fehlerhaft</p>
<p>enums können alle integralen Typen sein</p>
<pre><code class="language-cpp">enum heinz
{
  fail=-1
};
</code></pre>
<p>das Problem an enums ist das so viel implementationsspezifisch ist.<br />
das der Type eigentlich vom Ergebnis abhängt wird es mal grösser als int kann es unsigned int werden usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/989551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/989551</guid><dc:creator><![CDATA[b7f7]]></dc:creator><pubDate>Wed, 08 Feb 2006 17:31:33 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Wed, 08 Feb 2006 17:52:33 GMT]]></title><description><![CDATA[<p>Korrigiert und zu Kenntnis genommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/989575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/989575</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 08 Feb 2006 17:52:33 GMT</pubDate></item><item><title><![CDATA[Reply to Das ist lustig! on Wed, 08 Feb 2006 18:44:54 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1029">@rapso</a>: erstens sind enums nicht für diesen Einsatz gedacht (ich weiß, schwaches Argument)</p>
</blockquote>
<p>als ich das gelernt hatte, hat man genau das gegenteil gesagt, anonyme enums wären perfekt dafür gedacht, weil es keine datentypbindung hat, sondern für eine cpu optimal übersetzt werden kann.</p>
<p>[qoute]<br />
, zweitens schränken sie die möglichen Werte eines Metaalgorithmus' unnötig ein(z.B. kann enum iirc nicht negativ sein)[/quote]<br />
gerade durch negative zahlen ist der algo fehleranfällig <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<blockquote>
<p>Es gab noch einen besseren und einleuchtenderen Grund, der ist mir aber wohl entfallen.</p>
</blockquote>
<p>genau danach hatte ich ja gequängelt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/989609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/989609</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Wed, 08 Feb 2006 18:44:54 GMT</pubDate></item></channel></rss>