<?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[Sonderfall parameterlose Funktions-Templates und deren Spezialisierung]]></title><description><![CDATA[<p>Ich habe hier ein Problem mit dem Verständnis von parameterlosen Funktions-Templates, und deren Spezialisierung</p>
<pre><code class="language-cpp">template&lt; typename Type &gt; void bar() {};
template&lt; typename Type &gt; void bar(const T&amp; param) {};

int main()
{
   bar(); // wird wahrscheinlich nicht von allen Compilern übersetzt 
   bar&lt;int&gt;(); // warum so ? - Und wo im C++ Standard definiert?
   bar(&quot;Hallo Welt&quot;);         // funktioniert ohne Qualifizierung? - most specialized ?!
   bar&lt;char *&gt;(&quot;Hallo Welt&quot;); // Ist explizit, kann man auch sagen: lokal spezialisiertes Funktions-Template?
   return 0;
}
</code></pre>
<p>Mir ist das <strong>14.5.5.2 partial ordering of function templates S.300</strong> bekannt wonach immer die <strong>most specialized</strong> Template-Funktion aufgerufen wird, das erklärt mir aber nicht warum ich bei</p>
<pre><code class="language-cpp">void bar();
</code></pre>
<p>einen Typen angeben muss, hat dies etwas mit der ODR zu tun?. Um die Möglichkeit zu haben einen anderen Datentypen mit gleichem Namen einzuführen. <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>
<p>Ein Haufen Fragen, ich hoffe Ihr könnt helfen. G-DC!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/250779/sonderfall-parameterlose-funktions-templates-und-deren-spezialisierung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 21:43:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/250779.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Sep 2009 22:42:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sonderfall parameterlose Funktions-Templates und deren Spezialisierung on Wed, 23 Sep 2009 22:42:36 GMT]]></title><description><![CDATA[<p>Ich habe hier ein Problem mit dem Verständnis von parameterlosen Funktions-Templates, und deren Spezialisierung</p>
<pre><code class="language-cpp">template&lt; typename Type &gt; void bar() {};
template&lt; typename Type &gt; void bar(const T&amp; param) {};

int main()
{
   bar(); // wird wahrscheinlich nicht von allen Compilern übersetzt 
   bar&lt;int&gt;(); // warum so ? - Und wo im C++ Standard definiert?
   bar(&quot;Hallo Welt&quot;);         // funktioniert ohne Qualifizierung? - most specialized ?!
   bar&lt;char *&gt;(&quot;Hallo Welt&quot;); // Ist explizit, kann man auch sagen: lokal spezialisiertes Funktions-Template?
   return 0;
}
</code></pre>
<p>Mir ist das <strong>14.5.5.2 partial ordering of function templates S.300</strong> bekannt wonach immer die <strong>most specialized</strong> Template-Funktion aufgerufen wird, das erklärt mir aber nicht warum ich bei</p>
<pre><code class="language-cpp">void bar();
</code></pre>
<p>einen Typen angeben muss, hat dies etwas mit der ODR zu tun?. Um die Möglichkeit zu haben einen anderen Datentypen mit gleichem Namen einzuführen. <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>
<p>Ein Haufen Fragen, ich hoffe Ihr könnt helfen. G-DC!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1783343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1783343</guid><dc:creator><![CDATA[DeepCopy]]></dc:creator><pubDate>Wed, 23 Sep 2009 22:42:36 GMT</pubDate></item><item><title><![CDATA[Reply to Sonderfall parameterlose Funktions-Templates und deren Spezialisierung on Wed, 23 Sep 2009 23:19:08 GMT]]></title><description><![CDATA[<p>Antworten in Kapitel 14.8 ff.<br />
Partielle Ordnung von Funktionstemplates brauchen wir hier gar nicht - da die Funktionen jeweils eine verschiedene Parameterzahl haben, kommen wir gar nicht in die Verlegenheit mehr als eine Kandidatenfunktion für die Überladung zu haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1783349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1783349</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 23 Sep 2009 23:19:08 GMT</pubDate></item><item><title><![CDATA[Reply to Sonderfall parameterlose Funktions-Templates und deren Spezialisierung on Thu, 24 Sep 2009 08:41:30 GMT]]></title><description><![CDATA[<p>DeepCopy schrieb:</p>
<blockquote>
<p>das erklärt mir aber nicht warum ich bei</p>
<pre><code class="language-cpp">void bar();
</code></pre>
<p>einen Typen angeben muss</p>
</blockquote>
<p>Das Template stellt ja keine Funktion dar, sondern nur eine Schablone, aus der der Compiler selbstständig Funktionen erzeugen kann basierend auf den Template-Typen. Normalerweise leitet er diese aus den Parametern ab. Woher soll er aber beim Aufruf vo bar() wissen, welche Funktion er erzeugen soll, wenn er durch nichts den Template-Typ herleiten kann? Deswegen muss man in dem Fall den Typ explizit angeben, z.B. mit bar&lt;int&gt;().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1783438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1783438</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Thu, 24 Sep 2009 08:41:30 GMT</pubDate></item><item><title><![CDATA[Reply to Sonderfall parameterlose Funktions-Templates und deren Spezialisierung on Thu, 24 Sep 2009 08:42:19 GMT]]></title><description><![CDATA[<p>XMaster schrieb:</p>
<blockquote>
<p>DeepCopy schrieb:</p>
<blockquote>
<p>das erklärt mir aber nicht warum ich bei</p>
<pre><code class="language-cpp">void bar();
</code></pre>
<p>einen Typen angeben muss</p>
</blockquote>
<p>Das Template stellt ja keine Funktion dar, sondern nur eine Schablone, aus der der Compiler selbstständig Funktionen erzeugen kann basierend auf den Template-Typen. Normalerweise leitet er diese aus den Parametern ab. Woher soll er aber beim Aufruf von bar() wissen, welche Funktion er erzeugen soll, wenn er durch nichts den Template-Typ herleiten kann? Deswegen muss man in diesem Fall den Typ explizit angeben, z.B. mit bar&lt;int&gt;().</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1783439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1783439</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Thu, 24 Sep 2009 08:42:19 GMT</pubDate></item></channel></rss>