<?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[template-Spezialisierung]]></title><description><![CDATA[<p>Hi,<br />
ich habe vereinfacht folgenden Code:</p>
<pre><code class="language-cpp">template&lt;typename T, T Base&gt;
    struct GreatestPower
    {
      template&lt;unsigned long Value = Base,
               unsigned long Max   = sizeof(T) * 8,
               unsigned long I     = Max - 1&gt;
      struct IncreasePower
      {
        static T const X = IncreasePower&lt;Value, Max, 0&gt;::X;
      };

      template&lt;unsigned long Value, unsigned long Max&gt;
      struct IncreasePower&lt;Value, Max, 0&gt;
      {
        static T const X = 0;
      };

      static T const X = IncreasePower&lt;&gt;::X;
    };
</code></pre>
<p>Der funktioniert auch (macht was er soll). Aber Problem ist, dass der erste Template Parameter bei IncreasePower, also Value, eigentlich den Typ T und nicht unsigned long haben soll.<br />
Ändere ich das aber (sowohl bei der Definition als auch der Spezialisierung fuer I = 0) kann der g++ offensichtlich die Spezialisierung nicht mehr finden und looped 500 mal bis er die Rekursion wegen Überschreitung des Limits abbricht.</p>
<p>Frage: ist das nur ein Bug oder wie kommt dieses Verhalten zustande?</p>
<p>Danke für eure Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/262033/template-spezialisierung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 01:46:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262033.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 27 Feb 2010 16:00:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to template-Spezialisierung on Sat, 27 Feb 2010 16:00:15 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich habe vereinfacht folgenden Code:</p>
<pre><code class="language-cpp">template&lt;typename T, T Base&gt;
    struct GreatestPower
    {
      template&lt;unsigned long Value = Base,
               unsigned long Max   = sizeof(T) * 8,
               unsigned long I     = Max - 1&gt;
      struct IncreasePower
      {
        static T const X = IncreasePower&lt;Value, Max, 0&gt;::X;
      };

      template&lt;unsigned long Value, unsigned long Max&gt;
      struct IncreasePower&lt;Value, Max, 0&gt;
      {
        static T const X = 0;
      };

      static T const X = IncreasePower&lt;&gt;::X;
    };
</code></pre>
<p>Der funktioniert auch (macht was er soll). Aber Problem ist, dass der erste Template Parameter bei IncreasePower, also Value, eigentlich den Typ T und nicht unsigned long haben soll.<br />
Ändere ich das aber (sowohl bei der Definition als auch der Spezialisierung fuer I = 0) kann der g++ offensichtlich die Spezialisierung nicht mehr finden und looped 500 mal bis er die Rekursion wegen Überschreitung des Limits abbricht.</p>
<p>Frage: ist das nur ein Bug oder wie kommt dieses Verhalten zustande?</p>
<p>Danke für eure Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1862104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1862104</guid><dc:creator><![CDATA[templateloser]]></dc:creator><pubDate>Sat, 27 Feb 2010 16:00:15 GMT</pubDate></item></channel></rss>