<?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[Async und move-only Typen]]></title><description><![CDATA[<p>Hi! Kurze Frage. Ich fürchte, dass mein g++ (4.6.3) und die aktuell bei installierte libstdc++ da etwas buggy ist; denn laut Standard (bzw meiner Interpretation) müsste ich das hier doch kompiliert bekommen, oder?</p>
<pre><code class="language-cpp">#include &lt;future&gt;
#include &lt;memory&gt;

void foo(std::unique_ptr&lt;int&gt;)
{
}

int main()
{
   std::unique_ptr&lt;int&gt; p (new int(42));
   auto f = std::async(foo,move(p));
   f.get();
}
</code></pre>
<p>Bei mir will das nicht. Quasi endlos viele Fehlermeldungen vom Compiler -- habe da auch etwas mit <code>const tuple&lt;...&gt;</code> entdeckt, was mich glauben lässt, dass libstdc++ da was zu kopieren versucht, was nicht zu kopieren ist -- unique_ptr ist ja move-only.</p>
<p>Laut meiner Interpretation des Standards müsste das aber so klappen und der unique_ptr müsste &quot;korrekt geforwarded&quot; werden, also zumindest als rvalue, da ja DECAY_COPY ein rvalue in diesem Fall zurück gibt. Liege ich da falsch oder richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/325172/async-und-move-only-typen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 00:03:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325172.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Apr 2014 19:19:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Async und move-only Typen on Thu, 17 Apr 2014 19:19:25 GMT]]></title><description><![CDATA[<p>Hi! Kurze Frage. Ich fürchte, dass mein g++ (4.6.3) und die aktuell bei installierte libstdc++ da etwas buggy ist; denn laut Standard (bzw meiner Interpretation) müsste ich das hier doch kompiliert bekommen, oder?</p>
<pre><code class="language-cpp">#include &lt;future&gt;
#include &lt;memory&gt;

void foo(std::unique_ptr&lt;int&gt;)
{
}

int main()
{
   std::unique_ptr&lt;int&gt; p (new int(42));
   auto f = std::async(foo,move(p));
   f.get();
}
</code></pre>
<p>Bei mir will das nicht. Quasi endlos viele Fehlermeldungen vom Compiler -- habe da auch etwas mit <code>const tuple&lt;...&gt;</code> entdeckt, was mich glauben lässt, dass libstdc++ da was zu kopieren versucht, was nicht zu kopieren ist -- unique_ptr ist ja move-only.</p>
<p>Laut meiner Interpretation des Standards müsste das aber so klappen und der unique_ptr müsste &quot;korrekt geforwarded&quot; werden, also zumindest als rvalue, da ja DECAY_COPY ein rvalue in diesem Fall zurück gibt. Liege ich da falsch oder richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395160</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 17 Apr 2014 19:19:25 GMT</pubDate></item><item><title><![CDATA[Reply to Async und move-only Typen on Thu, 17 Apr 2014 20:11:29 GMT]]></title><description><![CDATA[<p>Probier den Code mal mit nem anderen Compiler (über <a href="http://ideone.com" rel="nofollow">ideone.com</a> oder so).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395173</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 17 Apr 2014 20:11:29 GMT</pubDate></item><item><title><![CDATA[Reply to Async und move-only Typen on Thu, 17 Apr 2014 20:25:04 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Probier den Code mal mit nem anderen Compiler (über <a href="http://ideone.com" rel="nofollow">ideone.com</a> oder so).</p>
</blockquote>
<p>Bei ideone kompiliert es, es gibt aber ne Exception, weil dort kein Threading unterstützt wird. Die Frage ist jetzt, ob async jetzt wirklich das alles ausführt mit moven, wo der Fehler auftritt, oder direkt eine Exception wirft.<br />
Edit: Und bei meinem gcc 4.8.1 auch, also liegts wohl am Compiler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395175</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 17 Apr 2014 20:25:04 GMT</pubDate></item><item><title><![CDATA[Reply to Async und move-only Typen on Thu, 17 Apr 2014 20:44:19 GMT]]></title><description><![CDATA[<p>Vermutlich an der Standardlibrary Implementierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395178</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 17 Apr 2014 20:44:19 GMT</pubDate></item><item><title><![CDATA[Reply to Async und move-only Typen on Thu, 17 Apr 2014 20:44:55 GMT]]></title><description><![CDATA[<p>VS2013:<br />
<code>error C2280: 'std::unique_ptr&lt;int,std::default_delete&lt;_Ty&gt;&gt;::unique_ptr(const std::unique_ptr&lt;_Ty,std::default_delete&lt;_Ty&gt;&gt; &amp;)' : attempting to reference a deleted function : c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional : 1112</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395179</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 17 Apr 2014 20:44:55 GMT</pubDate></item><item><title><![CDATA[Reply to Async und move-only Typen on Thu, 17 Apr 2014 20:45:29 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Vermutlich an der Standardlibrary Implementierung.</p>
</blockquote>
<p>Ja, Compiler, Standardimplementierung, IDE,... alles dasselbe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395180</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 17 Apr 2014 20:45:29 GMT</pubDate></item><item><title><![CDATA[Reply to Async und move-only Typen on Thu, 17 Apr 2014 21:11:33 GMT]]></title><description><![CDATA[<p>ok, wenn es also bei neueren Versionen funktioniert, gehe ich mal davon aus, dass die alte Version diesbezüglich buggy ist und dass meine Interpretation richtig ist.</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395185</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 17 Apr 2014 21:11:33 GMT</pubDate></item><item><title><![CDATA[Reply to Async und move-only Typen on Thu, 17 Apr 2014 21:36:01 GMT]]></title><description><![CDATA[<p>Das ist natürlich konform; <code>async</code> forwarded bzw. moved alle Argumente. Mein GCC 4.8.1 (wie der Nathans) führt es vollständig fehlerfrei aus.<br />
Was passiert, wenn du als Launch-Policy nur <code>async</code> angibst?</p>
<p>Edit: Ein wenig zu spät.... :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395191</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 17 Apr 2014 21:36:01 GMT</pubDate></item><item><title><![CDATA[Reply to Async und move-only Typen on Thu, 17 Apr 2014 21:34:53 GMT]]></title><description><![CDATA[<p>Die Implementation der stdlibc++ ist völlig konform: Alle Argumente in ein Tupel reinmoven zum Zwischenspeichern und dann über das Tupel die Argumente forwarden. Dafür brauchts halt rvalue-References auf *this, was der GCC 4.6.3 offensichtlich noch nicht unterstützt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2395192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395192</guid><dc:creator><![CDATA[aergds]]></dc:creator><pubDate>Thu, 17 Apr 2014 21:34:53 GMT</pubDate></item><item><title><![CDATA[Reply to Async und move-only Typen on Fri, 18 Apr 2014 03:24:10 GMT]]></title><description><![CDATA[<p>aergds schrieb:</p>
<blockquote>
<p>Dafür brauchts halt rvalue-References auf *this, was der GCC 4.6.3 offensichtlich noch nicht unterstützt.</p>
</blockquote>
<p>Ich bin mir ziemlich sicher, dass man das dafür <strong>nicht</strong> braucht. <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/2395214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2395214</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 18 Apr 2014 03:24:10 GMT</pubDate></item></channel></rss>