<?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 funktioniert nicht ...:]]></title><description><![CDATA[<p>Hi Leuts,</p>
<p>folgender Code</p>
<pre><code class="language-cpp">template&lt;class C&gt;
struct X {

    template&lt;class T&gt;
    struct x {
	};

    };

template&lt;template &lt;class&gt; class F, class C&gt;
struct Y {    
    };

template&lt;class C&gt;
struct TEST {
    template&lt;class T&gt;
    struct test {
	};

    template&lt;class T1, class T2&gt;
    struct test&lt;Y&lt;X&lt;T1&gt;::template x, T2&gt; &gt; {
	typedef X&lt;T1&gt; test_type;
	};
    };

int main (int argc, char *argv[]) {
    TEST&lt;double&gt;::test&lt; Y&lt;X&lt;int&gt;::x, char&gt; &gt;::test_type x; 
    }
</code></pre>
<p>Dies fuehrt zu einem fehler der Art</p>
<p>/usr/bin/g++ -ansi -g -c -o main.o main.cpp<br />
main.cpp: In function ‘int main(int, char**)’:<br />
main.cpp:123: error: ‘test_type’ is not a member of ‘TEST&lt;double&gt;::test&lt;Y&lt;X&lt;int&gt;::x, char&gt; &gt;’</p>
<p>ersetzt man hingegen die zweite Spezialisierung von test durch:</p>
<pre><code class="language-cpp">template&lt;template &lt;class&gt; class T0, class T2&gt;
struct test&lt;Y &lt;T0, T2&gt; &gt; {
   typedef X&lt;T2&gt; test_type;
   };
</code></pre>
<p>gehts ... warum aber nicht bei der ersten variante ... kommt der compiler nicht mit dem template-template-parameter in der spezialisierung klar?</p>
<p>Gruesse und Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/182103/template-spezialisierung-funktioniert-nicht</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 16:26:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/182103.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 May 2007 15:01:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template-Spezialisierung funktioniert nicht ...: on Mon, 21 May 2007 15:01:19 GMT]]></title><description><![CDATA[<p>Hi Leuts,</p>
<p>folgender Code</p>
<pre><code class="language-cpp">template&lt;class C&gt;
struct X {

    template&lt;class T&gt;
    struct x {
	};

    };

template&lt;template &lt;class&gt; class F, class C&gt;
struct Y {    
    };

template&lt;class C&gt;
struct TEST {
    template&lt;class T&gt;
    struct test {
	};

    template&lt;class T1, class T2&gt;
    struct test&lt;Y&lt;X&lt;T1&gt;::template x, T2&gt; &gt; {
	typedef X&lt;T1&gt; test_type;
	};
    };

int main (int argc, char *argv[]) {
    TEST&lt;double&gt;::test&lt; Y&lt;X&lt;int&gt;::x, char&gt; &gt;::test_type x; 
    }
</code></pre>
<p>Dies fuehrt zu einem fehler der Art</p>
<p>/usr/bin/g++ -ansi -g -c -o main.o main.cpp<br />
main.cpp: In function ‘int main(int, char**)’:<br />
main.cpp:123: error: ‘test_type’ is not a member of ‘TEST&lt;double&gt;::test&lt;Y&lt;X&lt;int&gt;::x, char&gt; &gt;’</p>
<p>ersetzt man hingegen die zweite Spezialisierung von test durch:</p>
<pre><code class="language-cpp">template&lt;template &lt;class&gt; class T0, class T2&gt;
struct test&lt;Y &lt;T0, T2&gt; &gt; {
   typedef X&lt;T2&gt; test_type;
   };
</code></pre>
<p>gehts ... warum aber nicht bei der ersten variante ... kommt der compiler nicht mit dem template-template-parameter in der spezialisierung klar?</p>
<p>Gruesse und Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1289178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1289178</guid><dc:creator><![CDATA[LIBS]]></dc:creator><pubDate>Mon, 21 May 2007 15:01:19 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung funktioniert nicht ...: on Mon, 21 May 2007 15:05:32 GMT]]></title><description><![CDATA[<p>EDIT: Ach neeee, kann nicht sein ... sorry.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1289179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1289179</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 21 May 2007 15:05:32 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung funktioniert nicht ...: on Mon, 21 May 2007 15:06:36 GMT]]></title><description><![CDATA[<p>Noe, daran liegt es nicht. typename einfuegen verursacht vielmehr noch einen weiteren Fahler:</p>
<p>/usr/bin/g++ -ansi -g -c -o main.o main.cpp<br />
main.cpp:98: error: expected nested-name-specifier<br />
main.cpp:98: error: expected ‘;’ before ‘test_type’<br />
main.cpp: In function ‘int main(int, char**)’:<br />
main.cpp:123: error: ‘test_type’ is not a member of ‘TEST&lt;double&gt;::test&lt;Y&lt;X&lt;int&gt;::x, char&gt; &gt;’</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1289181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1289181</guid><dc:creator><![CDATA[LIBS]]></dc:creator><pubDate>Mon, 21 May 2007 15:06:36 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung funktioniert nicht ...: on Mon, 21 May 2007 15:09:24 GMT]]></title><description><![CDATA[<p>LIBS schrieb:</p>
<blockquote>
<p>Noe, daran liegt es nicht. ...</p>
</blockquote>
<p>Hatte ich auch gerade gemerkt.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1289183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1289183</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 21 May 2007 15:09:24 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung funktioniert nicht ...: on Mon, 21 May 2007 15:40:37 GMT]]></title><description><![CDATA[<p>Spezialisierungen können nur auf Namespace-Ebene deklariert und definiert werden, nicht innerhalb eines Klassetemplates. Also</p>
<pre><code class="language-cpp">template&lt;class C&gt;
struct TEST {
    template&lt;class T&gt;
    struct test {
    };

    };

template&lt;class C&gt;
template&lt;class T1, class T2&gt;
struct TEST&lt;C&gt;::template test&lt;Y&lt;X&lt;T1&gt;::template x, T2&gt; &gt; {
typedef X&lt;T1&gt; test_type;
};
</code></pre>
<p>oder so ähnlich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1289208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1289208</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 21 May 2007 15:40:37 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung funktioniert nicht ...: on Tue, 22 May 2007 09:04:35 GMT]]></title><description><![CDATA[<p>Hi camper ...</p>
<p>1. Spezialisierungen können bei mir auch innerhalb eines Klassetemplates stehen -- kein problem eigentlich ...</p>
<p>2. selbst wenn ich beide Spezialisierungen auf Namespace-Ebene deklariere habe ich den beschriebenen fehler ... <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>
<p>gruesse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1289682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1289682</guid><dc:creator><![CDATA[LIBS]]></dc:creator><pubDate>Tue, 22 May 2007 09:04:35 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Spezialisierung funktioniert nicht ...: on Tue, 22 May 2007 09:34:04 GMT]]></title><description><![CDATA[<p>LIBS schrieb:</p>
<blockquote>
<p>Hi camper ...</p>
<p>1. Spezialisierungen können bei mir auch innerhalb eines Klassetemplates stehen -- kein problem eigentlich ...</p>
<p>2. selbst wenn ich beide Spezialisierungen auf Namespace-Ebene deklariere habe ich den beschriebenen fehler ... <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>
<p>gruesse</p>
</blockquote>
<p>Stimmt, war ich abwesend</p>
<p>Ein Versuch mit dem Comeau C++ Compiler ist aufschlussreich:</p>
<blockquote>
<p>&quot;ComeauTest.c&quot;, line 22: error: template parameter &quot;T1&quot; is not used in or cannot be<br />
deduced from the template argument list of class template<br />
&quot;TEST&lt;C&gt;::test&lt;Y&lt;X&lt;T1&gt;::x, T2&gt;&gt;&quot;<br />
template&lt;class T1, class T2&gt;<br />
^</p>
</blockquote>
<p>Y&lt;X&lt;T1&gt;::template x ist kein Kontext, in dem T1 deduziert werden kann (mit den jetzigen Regeln wäre es im Prinzip denkbar, spätestens wenn es template typedefs gibt, aber nicht mehr). Es fällt nicht unter die abschließende Liste in 14.8.2.4/9</p>
<blockquote>
<p>A template type argument T, a template template argument TT or a template non-type argument i can be<br />
deduced if P and A have one of the following forms:<br />
T<br />
cv-list T<br />
T*<br />
T&amp;<br />
T[integer-constant]<br />
template-name&lt;T&gt; (where template-name refers to a class template)<br />
type(<em>)(T)<br />
T(</em>)()<br />
T(<em>)(T)<br />
T type::</em><br />
type T::*<br />
T T::*<br />
T (type::<em>)()<br />
type (T::</em>)()<br />
type (type::<em>)(T)<br />
type (T::</em>)(T)<br />
T (type::<em>)(T)<br />
T (T::</em>)()<br />
T (T::*)(T)<br />
type[i]<br />
template-name&lt;i&gt; (where template-name refers to a class template)<br />
TT&lt;T&gt;<br />
TT&lt;i&gt;<br />
TT&lt;&gt;<br />
where (T) represents argument lists where at least one argument type contains a T, and () represents<br />
argument lists where no parameter contains a T. Similarly, &lt;T&gt; represents template argument lists where<br />
at least one argument contains a T, &lt;i&gt; represents template argument lists where at least one argument<br />
contains an i and &lt;&gt; represents template argument lists where no argument contains a T or an i.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1289705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1289705</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 22 May 2007 09:34:04 GMT</pubDate></item></channel></rss>