<?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[Bevorzugt der Compiler Instantiierung oder implizite Konvertierung?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>nehmen wir an, ich habe eine Funktion und ein Funtionstemplate in der Art;</p>
<pre><code>void foo(TypeA X);

template &lt;typename T&gt;
void foo(T X);
</code></pre>
<p>Jetzt rufe ich foo auf mit einem Variable eines Types welcher implizit in TypeA konvertierbar ist. Was passiert dann? Wird die Funktion aufgerufen, oder das Template für den exakten Typ instantiiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321083/bevorzugt-der-compiler-instantiierung-oder-implizite-konvertierung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 14:06:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321083.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Oct 2013 07:00:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bevorzugt der Compiler Instantiierung oder implizite Konvertierung? on Wed, 23 Oct 2013 07:01:28 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>nehmen wir an, ich habe eine Funktion und ein Funtionstemplate in der Art;</p>
<pre><code>void foo(TypeA X);

template &lt;typename T&gt;
void foo(T X);
</code></pre>
<p>Jetzt rufe ich foo auf mit einem Variable eines Types welcher implizit in TypeA konvertierbar ist. Was passiert dann? Wird die Funktion aufgerufen, oder das Template für den exakten Typ instantiiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362293</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Wed, 23 Oct 2013 07:01:28 GMT</pubDate></item><item><title><![CDATA[Reply to Bevorzugt der Compiler Instantiierung oder implizite Konvertierung? on Sat, 26 Oct 2013 06:46:44 GMT]]></title><description><![CDATA[<p>Nein, letztere wird aufgerufen.</p>
<p>Bei Overload Resolution wird eine Menge an sog. <em>viable functions</em> erstellt. Zu dieser gehört auch die Spezialisierung des Funktionstemplates (mit entsprechenden deduzierten Argumenten). Nun wäre, wenn du <code>foo(TypeA())</code> schreibst, die non-template Funktion besser:</p>
<blockquote>
<p>Given these definitions, a viable function <code>F1</code> is defined to be a better function than another viable function <code>F2</code> if for all arguments <em>i</em>, ICS<em>i</em>( <code>F1</code> ) is not a worse conversion sequence than ICS<em>i</em>( <code>F2</code> ), and then<br />
— for some argument <em>j</em>, ICS<em>j</em>( <code>F1</code> ) is a better conversion sequence than ICS<em>j</em>( <code>F2</code> ), or, if not that,<br />
[...]<br />
— <code>F1</code> is a non-template function and <code>F2</code> is a function template specialization, or, if not that,</p>
</blockquote>
<p>Wie du siehst trifft aber bei deinem Beispiel der erste Punkt zuerst zu, daher wird bei deinem Fall das Funktionstemplate aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2362297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2362297</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 26 Oct 2013 06:46:44 GMT</pubDate></item></channel></rss>