<?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[krudes Member-Template Problem]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich glaube heute ist wieder mal einer dieser Tage...aber seht selbst:</p>
<p>geht:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class Foo{
public:

  template &lt;typename X&gt;
  void doX(){

  }

  template &lt;typename Y&gt;
  void doY(Y y){
    y.doX&lt;int&gt;();
  }
};

int main(int argc, char *argv[]){
  return 0;
}
</code></pre>
<p>geht nicht:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class Foo{
public:

//   template &lt;typename X&gt;
//   void doX(){
// 
//   }

  template &lt;typename Y&gt;
  void doY(Y y){
    y.doX&lt;int&gt;();
  }
};

int main(int argc, char *argv[]){
  return 0;
}
</code></pre>
<p>G++ 4.2.4 sagt:</p>
<blockquote>
<p>test.cpp: In member function »void Foo&lt;T&gt;::doY(Y)«:<br />
test.cpp:12: Fehler: expected primary-expression before »int«<br />
test.cpp:12: Fehler: expected `;' before »int«</p>
</blockquote>
<p>Warum nur meint der Compiler, doX() in der Klasse Foo suchen zu müssen? Warum zur Hölle wir das Template überhaupt instanziiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/242121/krudes-member-template-problem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 03:59:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242121.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 30 May 2009 16:09:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to krudes Member-Template Problem on Sat, 30 May 2009 16:09:33 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich glaube heute ist wieder mal einer dieser Tage...aber seht selbst:</p>
<p>geht:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class Foo{
public:

  template &lt;typename X&gt;
  void doX(){

  }

  template &lt;typename Y&gt;
  void doY(Y y){
    y.doX&lt;int&gt;();
  }
};

int main(int argc, char *argv[]){
  return 0;
}
</code></pre>
<p>geht nicht:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class Foo{
public:

//   template &lt;typename X&gt;
//   void doX(){
// 
//   }

  template &lt;typename Y&gt;
  void doY(Y y){
    y.doX&lt;int&gt;();
  }
};

int main(int argc, char *argv[]){
  return 0;
}
</code></pre>
<p>G++ 4.2.4 sagt:</p>
<blockquote>
<p>test.cpp: In member function »void Foo&lt;T&gt;::doY(Y)«:<br />
test.cpp:12: Fehler: expected primary-expression before »int«<br />
test.cpp:12: Fehler: expected `;' before »int«</p>
</blockquote>
<p>Warum nur meint der Compiler, doX() in der Klasse Foo suchen zu müssen? Warum zur Hölle wir das Template überhaupt instanziiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718335</guid><dc:creator><![CDATA[maximAL]]></dc:creator><pubDate>Sat, 30 May 2009 16:09:33 GMT</pubDate></item><item><title><![CDATA[Reply to krudes Member-Template Problem on Sat, 30 May 2009 16:34:40 GMT]]></title><description><![CDATA[<p><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="😕"
    /> ...<br />
Wenn du in der Klasse Foo die Methode doX aufrufst, wird der Compiler wohl danach suchen müssen?...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718341</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Sat, 30 May 2009 16:34:40 GMT</pubDate></item><item><title><![CDATA[Reply to krudes Member-Template Problem on Sat, 30 May 2009 16:48:06 GMT]]></title><description><![CDATA[<p>Theoretisch müsste er es nicht instanzieren, aber IIRC darf dein Compiler da eine Instanzierung machen. VC geht.<br />
Leider habe ich jetzt keine Zeit mehr, sonst würde ich die genaue Stelle im Standard nachschlagen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718345</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 30 May 2009 16:48:06 GMT</pubDate></item><item><title><![CDATA[Reply to krudes Member-Template Problem on Sat, 30 May 2009 16:54:22 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Theoretisch müsste er es nicht instanzieren, aber IIRC darf dein Compiler da eine Instanzierung machen. VC geht.</p>
</blockquote>
<p>Darf er? Mit was denn? Der Compiler weiss doch weder was T noch Y ist?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718347</guid><dc:creator><![CDATA[maximAL]]></dc:creator><pubDate>Sat, 30 May 2009 16:54:22 GMT</pubDate></item><item><title><![CDATA[Reply to krudes Member-Template Problem on Sat, 30 May 2009 17:17:09 GMT]]></title><description><![CDATA[<p>eventuell hast du ein template vergessen:</p>
<pre><code class="language-cpp">y.template doX&lt;int&gt;();
</code></pre>
<p>der msvc braucht das imho nicht unbedingt, aber andere Compiler kommen imho nicht ohne aus...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718352</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 30 May 2009 17:17:09 GMT</pubDate></item><item><title><![CDATA[Reply to krudes Member-Template Problem on Sat, 30 May 2009 17:24:37 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>eventuell hast du ein template vergessen:</p>
<pre><code class="language-cpp">y.template doX&lt;int&gt;();
</code></pre>
</blockquote>
<p>Bis eben wusste ich nichtmal, dass es dieses Sprachkonstrukt gibt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /><br />
Aber ja, so geht das tatsächlich.<br />
Da das allerdings so exotisch ist (zumindest hab ichs in ~10 Jahren C++ nie gesehen), frage ich mich, wieviele Compiler tatsächlich damit klarkommen...wobei scheinbar sogar der g++ 2.95.1 damit klar kommt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718355</guid><dc:creator><![CDATA[maximAL]]></dc:creator><pubDate>Sat, 30 May 2009 17:24:37 GMT</pubDate></item><item><title><![CDATA[Reply to krudes Member-Template Problem on Sat, 30 May 2009 17:29:04 GMT]]></title><description><![CDATA[<p>ich kenn keinen, der es nicht kann - kann ich mir auch schwer vorstellen...</p>
<p>ich habs zwar auch noch nie gebraucht und kenn es nur aus dem forum aus paar fragen, aber als exotisch würd ich das jz nicht bezeichnen...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718358</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 30 May 2009 17:29:04 GMT</pubDate></item><item><title><![CDATA[Reply to krudes Member-Template Problem on Sat, 30 May 2009 17:43:59 GMT]]></title><description><![CDATA[<p>maximAL schrieb:</p>
<blockquote>
<p>zumindest hab ichs in ~10 Jahren C++ nie gesehen</p>
</blockquote>
<p>Wieviele Jahre davon hast du dich ernsthaft mit Templates beschäftigt? Das Konstrukt ist Standard bei Aufruf von Memberfunktionstemplates.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718366</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 30 May 2009 17:43:59 GMT</pubDate></item><item><title><![CDATA[Reply to krudes Member-Template Problem on Sat, 30 May 2009 18:44:44 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>maximAL schrieb:</p>
<blockquote>
<p>zumindest hab ichs in ~10 Jahren C++ nie gesehen</p>
</blockquote>
<p>Wieviele Jahre davon hast du dich ernsthaft mit Templates beschäftigt? Das Konstrukt ist Standard bei Aufruf von Memberfunktionstemplates.</p>
</blockquote>
<p>Womöglich liegts auch einfach daran, dass ich die längste Zeit tatsächlich mit MSVC gearbeitet hatte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Zumal das ganze auch nur dann nötig ist, wenn man die Funktion wiederum aus einem anderen Template aufruft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718390</guid><dc:creator><![CDATA[maximAL]]></dc:creator><pubDate>Sat, 30 May 2009 18:44:44 GMT</pubDate></item><item><title><![CDATA[Reply to krudes Member-Template Problem on Sat, 30 May 2009 20:56:41 GMT]]></title><description><![CDATA[<p>maximAL schrieb:</p>
<blockquote>
<p>Zumal das ganze auch nur dann nötig ist, wenn man die Funktion wiederum aus einem anderen Template aufruft.</p>
</blockquote>
<p>Um genau zu sein ist es immer dann nötig, wenn du eine Templatefunktion eines templatetypen aufrufen willst. Die Begründung dafür ist, dass der compiler bei einem templatetyp nicht sagen kann, was &quot;y.dox&quot; ist. Dies ist aber für die Interpretation des Codes verdammt wichtig, weil die templatesyntax nicht kontextfrei ist. Der Standard sagt: ohne &quot;template&quot; davor ist es eine Variable. Also wird &quot;dox&quot; als Wert genommen, das &quot;&lt;&quot; als operator&lt; interpretiert, und beim nachfolgenden &quot;int&gt;&quot; geht das Ganze dann endgültig schief.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718432</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 30 May 2009 20:56:41 GMT</pubDate></item></channel></rss>