<?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[Frage zu perfect forwarding]]></title><description><![CDATA[<p>Hallo,</p>
<p>Warum geht perfect forwarding in C++11 eigentlich nur in verbindung mit Templates?</p>
<pre><code>template&lt;class _T, class _D&gt;
std::pair&lt;vec,vec&gt; make_pair1(_T &amp;&amp;a, _T &amp;&amp;b)
{
  return std::pair&lt;_T, _D&gt;(
    std::forward&lt;_T&gt;(a),
    std::forward&lt;_D&gt;(b)
  );
}
</code></pre>
<pre><code>typedef std::vector&lt;int&gt; vec;
std::pair&lt;vec,vec&gt; make_pair2(vec &amp;&amp;a, vec &amp;&amp;b)
{
  return std::pair&lt;vec, vec&gt;(
    std::forward&lt;vec&gt;(a),
    std::forward&lt;vec&gt;(b)
  );
}
</code></pre>
<pre><code>vec X = {1,2,3};
  auto x = make_pair1(X, vec{ 2,3,3} ); //(1)
  auto x = make_pair2(X, vec{ 2,3,3} );  //(2)
</code></pre>
<p>Variante 2 geht aber Variante 1 beschwert sich, dass vec nicht nach vec&amp;&amp; umgewandelt werden kann.<br />
Die Templates ersetzen doch nur die Bezeichner, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/312391/frage-zu-perfect-forwarding</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 20:35:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312391.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Jan 2013 14:25:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu perfect forwarding on Thu, 03 Jan 2013 14:25:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Warum geht perfect forwarding in C++11 eigentlich nur in verbindung mit Templates?</p>
<pre><code>template&lt;class _T, class _D&gt;
std::pair&lt;vec,vec&gt; make_pair1(_T &amp;&amp;a, _T &amp;&amp;b)
{
  return std::pair&lt;_T, _D&gt;(
    std::forward&lt;_T&gt;(a),
    std::forward&lt;_D&gt;(b)
  );
}
</code></pre>
<pre><code>typedef std::vector&lt;int&gt; vec;
std::pair&lt;vec,vec&gt; make_pair2(vec &amp;&amp;a, vec &amp;&amp;b)
{
  return std::pair&lt;vec, vec&gt;(
    std::forward&lt;vec&gt;(a),
    std::forward&lt;vec&gt;(b)
  );
}
</code></pre>
<pre><code>vec X = {1,2,3};
  auto x = make_pair1(X, vec{ 2,3,3} ); //(1)
  auto x = make_pair2(X, vec{ 2,3,3} );  //(2)
</code></pre>
<p>Variante 2 geht aber Variante 1 beschwert sich, dass vec nicht nach vec&amp;&amp; umgewandelt werden kann.<br />
Die Templates ersetzen doch nur die Bezeichner, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285757</guid><dc:creator><![CDATA[std__forward]]></dc:creator><pubDate>Thu, 03 Jan 2013 14:25:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu perfect forwarding on Thu, 03 Jan 2013 14:31:14 GMT]]></title><description><![CDATA[<p>Perfect forwarding ist ein Nebeneffekt von &quot;reference collapsing&quot;. Den gleichen Effekt kannst du auch mit typedef oder auto erreichen (damit lässt sich leider kein perfect forwarding erreichen, aber es passiert das Gleiche.)<br />
<a href="http://stackoverflow.com/questions/4425182/question-about-c0x-reference-collapse" rel="nofollow">http://stackoverflow.com/questions/4425182/question-about-c0x-reference-collapse</a><br />
Sehr schönes Video von Meyers, da wird alles im Detail erklärt:<br />
<a href="http://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012-Scott-Meyers-Universal-References-in-Cpp11" rel="nofollow">http://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012-Scott-Meyers-Universal-References-in-Cpp11</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285760</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 03 Jan 2013 14:31:14 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu perfect forwarding on Thu, 03 Jan 2013 14:35:16 GMT]]></title><description><![CDATA[<p>Das Perfect Forwarding ist gewissermassen ein Hack mit den RValues:</p>
<pre><code class="language-cpp">template&lt;class _T, class _D&gt;
std::pair&lt;vec,vec&gt; make_pair1(_T &amp;&amp;a, _T &amp;&amp;b)

auto x = make_pair1(X, vec{ 2,3,3} ); // _T = P&amp; &amp;&amp;  =&gt; P&amp;
                                      // _D = P&amp;&amp; &amp;&amp; =&gt; P&amp;&amp;

auto x = make_pair1(X, X); // _T = P&amp; &amp;&amp; =&gt; P&amp;
                           // _D = P&amp; &amp;&amp; =&gt; P&amp;
</code></pre>
<p>Das ganze läuft somit auf 2 verschiedene Instanzierungen der Funktion hinaus, und das geht nur mit Templates.</p>
<p>Die Verwandlung P&amp; &amp;&amp; =&gt; P&amp; nennt sich Reference Collapsing (googlebar).<br />
Vielleicht interessant: <a href="http://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012-Scott-Meyers-Universal-References-in-Cpp11" rel="nofollow">http://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012-Scott-Meyers-Universal-References-in-Cpp11</a></p>
<p>Halte dich im Übrigen von Bezeichnern wie _T und _D fern, das sind reservierte Bezeichner, die du eigentlich nicht verwenden darfst.</p>
<p>Hmm, jetzt war das Küchlein etwas schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285764</guid><dc:creator><![CDATA[fürwahr]]></dc:creator><pubDate>Thu, 03 Jan 2013 14:35:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu perfect forwarding on Thu, 03 Jan 2013 15:34:43 GMT]]></title><description><![CDATA[<p>std__forward schrieb:</p>
<blockquote>
<p>Warum geht perfect forwarding in C++11 eigentlich nur in verbindung mit Templates?</p>
</blockquote>
<p>Weil man zur Compile-Zeit wissen muss, was man für ein Argument hatte (Typ und Wert-Kategorie). Ohne dies wird es unmöglich das Ding an die richtige Funktion weiterzuleiten, da letztere überladen sein kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285782</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 03 Jan 2013 15:34:43 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu perfect forwarding on Thu, 03 Jan 2013 23:19:24 GMT]]></title><description><![CDATA[<p>In letzter zeit werden vermehrt (wie ich finde) ziemlich coole videos verlinkt. Vielleicht wärs mal cool ne liste mit videos zu machen <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/2285965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285965</guid><dc:creator><![CDATA[videoman]]></dc:creator><pubDate>Thu, 03 Jan 2013 23:19:24 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu perfect forwarding on Fri, 04 Jan 2013 09:01:12 GMT]]></title><description><![CDATA[<p>Danke an alle die geantwortet haben.</p>
<p>Das Video werde ich mir anschauen, wenn ich irgendwann Zeit habe.<br />
reference collapsing kannte ich noch gar nicht, klärt aber einiges.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2286022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2286022</guid><dc:creator><![CDATA[std__forward]]></dc:creator><pubDate>Fri, 04 Jan 2013 09:01:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu perfect forwarding on Fri, 04 Jan 2013 14:17:33 GMT]]></title><description><![CDATA[<p>fürwahr schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;class _T, class _D&gt;
std::pair&lt;vec,vec&gt; make_pair1(_T &amp;&amp;a, _D &amp;&amp;b)

auto x = make_pair1(X, vec{ 2,3,3} ); // _T = P&amp; &amp;&amp;  =&gt; P&amp;
                                      // _D = P&amp;&amp; &amp;&amp; =&gt; P&amp;&amp;
</code></pre>
</blockquote>
<p>Das stimmt so nicht ganz. _D ist keine Rvalue-Referenz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2286191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2286191</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 04 Jan 2013 14:17:33 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu perfect forwarding on Fri, 04 Jan 2013 15:01:26 GMT]]></title><description><![CDATA[<p>videoman schrieb:</p>
<blockquote>
<p>In letzter zeit werden vermehrt (wie ich finde) ziemlich coole videos verlinkt. Vielleicht wärs mal cool ne liste mit videos zu machen <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>
</blockquote>
<p>Äh, schon mal ins Video-Board geguckt? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2286218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2286218</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 04 Jan 2013 15:01:26 GMT</pubDate></item></channel></rss>