<?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[templates: Rückgabetyp]]></title><description><![CDATA[<p>Hallo,</p>
<p>Man kann in C++ ja Funktionen nicht überladen, wenn sie sich nur durch ihren Rückgabetyp unterscheiden. Folgendes geht also nicht:</p>
<pre><code class="language-cpp">int foo();
void foo();
</code></pre>
<p>Jetzt hab ich aber etwas ähnliches mit einem template gelöst:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;

template&lt;typename T&gt;
T foo();

template&lt;&gt;
std::string foo() {
	return(&quot;foo&quot;);
}

template&lt;&gt;
int foo() {
	return(80);
}

int main() {
	std::cout &lt;&lt; foo&lt;std::string&gt;() &lt;&lt; foo&lt;int&gt;();
	std::cin.get();
	return(0);
}
</code></pre>
<p>Das ist ja letztlich vom Ergebnis nur insofern anders, als das man den Rückgabetyp als template-Parameter angeben muss.<br />
Das schluckt VC++, er gibt &quot;foo80&quot; aus. Ist das Standardkonform, d.h. funktioniert das auf jedem Compiler?</p>
<p>mfg<br />
Mr X</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271580/templates-rückgabetyp</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 11:19:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271580.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 31 Jul 2010 08:57:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to templates: Rückgabetyp on Sat, 31 Jul 2010 08:57:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Man kann in C++ ja Funktionen nicht überladen, wenn sie sich nur durch ihren Rückgabetyp unterscheiden. Folgendes geht also nicht:</p>
<pre><code class="language-cpp">int foo();
void foo();
</code></pre>
<p>Jetzt hab ich aber etwas ähnliches mit einem template gelöst:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;

template&lt;typename T&gt;
T foo();

template&lt;&gt;
std::string foo() {
	return(&quot;foo&quot;);
}

template&lt;&gt;
int foo() {
	return(80);
}

int main() {
	std::cout &lt;&lt; foo&lt;std::string&gt;() &lt;&lt; foo&lt;int&gt;();
	std::cin.get();
	return(0);
}
</code></pre>
<p>Das ist ja letztlich vom Ergebnis nur insofern anders, als das man den Rückgabetyp als template-Parameter angeben muss.<br />
Das schluckt VC++, er gibt &quot;foo80&quot; aus. Ist das Standardkonform, d.h. funktioniert das auf jedem Compiler?</p>
<p>mfg<br />
Mr X</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934311</guid><dc:creator><![CDATA[Mr X]]></dc:creator><pubDate>Sat, 31 Jul 2010 08:57:27 GMT</pubDate></item><item><title><![CDATA[Reply to templates: Rückgabetyp on Sat, 31 Jul 2010 09:41:01 GMT]]></title><description><![CDATA[<p>Ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934319</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 31 Jul 2010 09:41:01 GMT</pubDate></item><item><title><![CDATA[Reply to templates: Rückgabetyp on Sat, 31 Jul 2010 09:55:37 GMT]]></title><description><![CDATA[<p>Ok, Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934323</guid><dc:creator><![CDATA[Mr X]]></dc:creator><pubDate>Sat, 31 Jul 2010 09:55:37 GMT</pubDate></item><item><title><![CDATA[Reply to templates: Rückgabetyp on Sat, 31 Jul 2010 10:41:26 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ja.</p>
</blockquote>
<p>nur so aus interesse: warum?? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934334</guid><dc:creator><![CDATA[vrwndrt]]></dc:creator><pubDate>Sat, 31 Jul 2010 10:41:26 GMT</pubDate></item><item><title><![CDATA[Reply to templates: Rückgabetyp on Sat, 31 Jul 2010 11:03:47 GMT]]></title><description><![CDATA[<p>Weil der Compiler daraus zwei verschiedene Funktionen mit unterschiedlichen Namen (mittels 'name mangling') macht, z.B. foo@std_string und foo@int.<br />
Der Linker kriegt dann nur diese Namen zu sehen (und nicht den Template Namen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934344</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 31 Jul 2010 11:03:47 GMT</pubDate></item><item><title><![CDATA[Reply to templates: Rückgabetyp on Sat, 31 Jul 2010 12:31:28 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<p>Weil der Compiler daraus zwei verschiedene Funktionen mit unterschiedlichen Namen (mittels 'name mangling') macht, z.B. foo@std_string und foo@int.<br />
Der Linker kriegt dann nur diese Namen zu sehen (und nicht den Template Namen).</p>
</blockquote>
<p>danke für die erklärung <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934375</guid><dc:creator><![CDATA[vrwndrt]]></dc:creator><pubDate>Sat, 31 Jul 2010 12:31:28 GMT</pubDate></item><item><title><![CDATA[Reply to templates: Rückgabetyp on Sat, 31 Jul 2010 14:11:16 GMT]]></title><description><![CDATA[<p>Mr X schrieb:</p>
<blockquote>
<p>Ist das Standardkonform</p>
</blockquote>
<p>Ja.</p>
<blockquote>
<p>d.h. funktioniert das auf jedem Compiler?</p>
</blockquote>
<p>Ich bin mir nicht 100% sicher, aber ich denke mit VC6 wird es Probleme machen.</p>
<p>VC6 verwendet zum &quot;auseinanderhalten&quot; von Template-Funktionen nur die Parameter der Funktion, NICHT die Template-Parameter. Nachdem man in C++ nirgends nur mit dem Return-Typ überladen kann, schätze ich, dass hier auch der Return-Typ nicht geprüft wird.</p>
<p>Was bei VC6 passiert, ist, dass das Programm fehlerfrei compiliert und linkt, nur beim Ausführen kann es passieren, dass die falsche Funktion aufgerufen wird.</p>
<p>Mehr Infos hier (inklusive Workaround):</p>
<p><a href="http://womble.decadent.org.uk/c++/template-faq.html#vc6-name-mangling-bug" rel="nofollow">http://womble.decadent.org.uk/c++/template-faq.html#vc6-name-mangling-bug</a></p>
<p>Ab VC7 ist der Fehler behoben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934424</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 31 Jul 2010 14:11:16 GMT</pubDate></item></channel></rss>