<?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[explizite Spezialisierung und static Member]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgende Template Klasse</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class A
{
    //...
};
</code></pre>
<p>Davon existiert nun eine explizite Spezialisierung mit einem static Member</p>
<pre><code class="language-cpp">template &lt;&gt;
class A&lt;double&gt;
{
    static const double b;
};
</code></pre>
<p>Soweit mir bekannt ist, muss nun die Definition laut 14.7.3/5 wie folgt aussehen:</p>
<pre><code class="language-cpp">const double A&lt;double&gt;::b = /*...*/;
</code></pre>
<p>Dies schluckt der MSC auch problemlos und gibt bei folgender Version einen Fehler aus:</p>
<pre><code class="language-cpp">template &lt;&gt;
const double A&lt;double&gt;::b = /*...*/;
</code></pre>
<p>GCC akzeptiert jedoch beides anstandslos.</p>
<p>Ist das nun ein Fehler beim GCC? Oder habe ich irgendetwas übersehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/157693/explizite-spezialisierung-und-static-member</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Apr 2026 09:19:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/157693.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 28 Aug 2006 16:54:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to explizite Spezialisierung und static Member on Mon, 28 Aug 2006 16:54:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgende Template Klasse</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class A
{
    //...
};
</code></pre>
<p>Davon existiert nun eine explizite Spezialisierung mit einem static Member</p>
<pre><code class="language-cpp">template &lt;&gt;
class A&lt;double&gt;
{
    static const double b;
};
</code></pre>
<p>Soweit mir bekannt ist, muss nun die Definition laut 14.7.3/5 wie folgt aussehen:</p>
<pre><code class="language-cpp">const double A&lt;double&gt;::b = /*...*/;
</code></pre>
<p>Dies schluckt der MSC auch problemlos und gibt bei folgender Version einen Fehler aus:</p>
<pre><code class="language-cpp">template &lt;&gt;
const double A&lt;double&gt;::b = /*...*/;
</code></pre>
<p>GCC akzeptiert jedoch beides anstandslos.</p>
<p>Ist das nun ein Fehler beim GCC? Oder habe ich irgendetwas übersehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1126300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1126300</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Mon, 28 Aug 2006 16:54:13 GMT</pubDate></item><item><title><![CDATA[Reply to explizite Spezialisierung und static Member on Mon, 28 Aug 2006 20:59:54 GMT]]></title><description><![CDATA[<p>Der Comeau lässt letzteres im strict mode nicht durchgehen, bei ersterem gibt er keinerlei Hinweis aus.<br />
Also kann man wohl ziemlich sicher sagen, dass ersteres dem Standard entspricht und zweiteres nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1126449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1126449</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Mon, 28 Aug 2006 20:59:54 GMT</pubDate></item><item><title><![CDATA[Reply to explizite Spezialisierung und static Member on Tue, 29 Aug 2006 07:00:22 GMT]]></title><description><![CDATA[<p>Hmmm...dann hat wohl GCC (respektive MinGW) hier noch Nachholbedarf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1126554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1126554</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Tue, 29 Aug 2006 07:00:22 GMT</pubDate></item><item><title><![CDATA[Reply to explizite Spezialisierung und static Member on Tue, 29 Aug 2006 07:10:45 GMT]]></title><description><![CDATA[<p>Um welche GCC Version geht's denn? (Glaskugel ist in Reinigung <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/1126560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1126560</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 29 Aug 2006 07:10:45 GMT</pubDate></item><item><title><![CDATA[Reply to explizite Spezialisierung und static Member on Tue, 29 Aug 2006 07:17:15 GMT]]></title><description><![CDATA[<p>Also mein MinGW (g++ (GCC) 3.4.4 (mingw special)) schluckt beides problemlos, während der VC8 bei letzterem einen Fehler ausgibt ...<br />
Wie genau sieht dein Code dafür aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1126564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1126564</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 29 Aug 2006 07:17:15 GMT</pubDate></item><item><title><![CDATA[Reply to explizite Spezialisierung und static Member on Tue, 29 Aug 2006 08:08:58 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Um welche GCC Version geht's denn? (Glaskugel ist in Reinigung <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>
<blockquote>
<p>MinGW</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> <a href="http://www.mingw.org/" rel="nofollow">http://www.mingw.org/</a> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Version 3.4.5 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Bingo! <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="😉"
    /><br />
Nee, aber mal Spass beiseite. Es geht um die &quot;Candidate&quot; MinGW Version, also 3.4.5.</p>
<p>.filmor schrieb:</p>
<blockquote>
<p>Wie genau sieht dein Code dafür aus?</p>
</blockquote>
<p>Wie meinst du das? Der Code sieht vereinfacht genauso aus, wie ich ihn bereits gepostet habe. Natürlich ist in den Klassen noch mehr Inhalt, für das Problem aber irrelevant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1126605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1126605</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Tue, 29 Aug 2006 08:08:58 GMT</pubDate></item><item><title><![CDATA[Reply to explizite Spezialisierung und static Member on Tue, 29 Aug 2006 08:15:37 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>.filmor schrieb:</p>
<blockquote>
<p>Wie genau sieht dein Code dafür aus?</p>
</blockquote>
<p>Wie meinst du das? Der Code sieht vereinfacht genauso aus, wie ich ihn bereits gepostet habe. Natürlich ist in den Klassen noch mehr Inhalt, für das Problem aber irrelevant.</p>
</blockquote>
<p>Schon klar, ich meinte eher wie das so dateimäßig aussieht. Ich hab einfach alles in eine Datei geschrieben, aber so dachtest du dir das wahrscheinlich nicht...</p>
<p>Und wie ich gerade gesehen habe, habe ich mich wohl verlesen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1126613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1126613</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 29 Aug 2006 08:15:37 GMT</pubDate></item><item><title><![CDATA[Reply to explizite Spezialisierung und static Member on Tue, 29 Aug 2006 08:38:17 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Schon klar, ich meinte eher wie das so dateimäßig aussieht. Ich hab einfach alles in eine Datei geschrieben, aber so dachtest du dir das wahrscheinlich nicht...</p>
</blockquote>
<p>Doch, kann man durchaus so machen. Wenn du willst, kannst du aber auch die Klasse in einen Header stecken, und die Definition in die .cpp. Ist für die eigentliche Problematik nicht von Bedeutung.</p>
<p>Übrigens nochwas:<br />
kompiliert wurde beim MSC mit</p>
<pre><code>/W4
</code></pre>
<p>und beim GGC mit</p>
<pre><code>-std=c++98 -Wall -Wextra -pedantic
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1126628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1126628</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Tue, 29 Aug 2006 08:38:17 GMT</pubDate></item><item><title><![CDATA[Reply to explizite Spezialisierung und static Member on Tue, 29 Aug 2006 09:28:26 GMT]]></title><description><![CDATA[<p>Hallo,<br />
syntaktisch gesehen, sind beide Varianten legal. Welche die richtige ist, ist abhängig von der konkreten Situation.</p>
<p>Wenn du ein Template X hast, dass ein statisches Element i enthält welches normalerweise mit 42 initialisiert wird, du für den Fall, dass X mit int instanziiert wird i aber gerne mit 22 belegen würdest, dann schreibst du:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
struct X {
    static int i;
};

template &lt;class T&gt;
int X&lt;T&gt;::i = 17;

template&lt;&gt;
int X&lt;int&gt;::i = 22;
</code></pre>
<p>Du spezialisierst somit X&lt;T&gt;::i für T = int.</p>
<p>Wenn du allerdings das ganze Template explizit spezialisiert hast (die resultierende Klasse ist kein Template mehr) und du ein statisches Member dieser Spezialisierung definieren willst, dann muss das template&lt;&gt; wegbleiben:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
struct X {
    static int i;
};

template &lt;&gt;
struct X&lt;int&gt; {
    static int i;
};

template &lt;class T&gt;
int X&lt;T&gt;::i = 17;

int X&lt;int&gt;::i = 22;
</code></pre>
<p>Hier definiertst du das i der Spezialisierung von X für int.<br />
Da die explizite Spezialisierung eines Templates vorang vor einer expliziten Member-Spezialisierung eines Templates hat, ist:</p>
<pre><code class="language-cpp">template&lt;&gt;
int X&lt;int&gt;::i = 22;
</code></pre>
<p>hier nicht erlaubt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1126677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1126677</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Tue, 29 Aug 2006 09:28:26 GMT</pubDate></item><item><title><![CDATA[Reply to explizite Spezialisierung und static Member on Tue, 29 Aug 2006 10:12:18 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Wenn du allerdings das ganze Template explizit spezialisiert hast (die resultierende Klasse ist kein Template mehr) und du ein statisches Member dieser Spezialisierung definieren willst, dann muss das template&lt;&gt; wegbleiben</p>
</blockquote>
<p>Also liegt hier, wie ich bereits vermutete, ein Fehlverhalten beim GCC vor!?<br />
Es geht mir dabei ausschliesslich um die explizite Spezialisierung. Die ursprüngliche Template Klasse hat diesen Member auch gar nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1126714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1126714</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Tue, 29 Aug 2006 10:12:18 GMT</pubDate></item><item><title><![CDATA[Reply to explizite Spezialisierung und static Member on Tue, 29 Aug 2006 10:29:47 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Wenn du allerdings das ganze Template explizit spezialisiert hast (die resultierende Klasse ist kein Template mehr) und du ein statisches Member dieser Spezialisierung definieren willst, dann muss das template&lt;&gt; wegbleiben</p>
</blockquote>
<p>Also liegt hier, wie ich bereits vermutete, ein Fehlverhalten beim GCC vor!?</p>
</blockquote>
<p>Korrekt. Wobei dieses Fehlverhalten beim GCC in der Version 4.0.1 nicht mehr auftritt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1126731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1126731</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Tue, 29 Aug 2006 10:29:47 GMT</pubDate></item><item><title><![CDATA[Reply to explizite Spezialisierung und static Member on Wed, 30 Aug 2006 07:33:47 GMT]]></title><description><![CDATA[<p>Na dann will ich mal hoffen, dass MinGW irgendwann in absehbarer Zeit auch für Version 4.x verfügbar sein wird. <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="🙂"
    /><br />
Jedenfalls danke an alle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127344</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Wed, 30 Aug 2006 07:33:47 GMT</pubDate></item></channel></rss>