<div dir="ltr"><div>Hi All,</div><div><br></div><div>I through a copy of your patch up on phabricator here with some inline comments, but for the most part it seems correct and the right way to do things.</div><div><a href="http://reviews.llvm.org/D5596">http://reviews.llvm.org/D5596</a></div><div><br></div><div>I'm not convinced direction all together and I'll leave that decision up to others. </div><div>I would prefer David's suggestion and to leave libc++ unchanged, but I'm not opposed to this change all together. </div><div><br></div><div>/Eric</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 1, 2014 at 12:57 PM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">[+Marshall as libc++ maintainer]<br><br>What would it look like if we just provided a value-semantic-C++ wrapper around blocks, translating C++ move/copy operations down to the Block_copy/release/etc operations?<br><br>That way it'd be orthogonal to the type erasure of std::function and could be used just for a convenience when using blocks in C++ code anyway:<br><br>  auto x = make_cpp_block(/* block stuff */);<br>  auto y = x;<br>  x();<br>  etc... <br><br>(& then you'd compose them with "std::function<...> f = make_cpp_block(...);" (the block wrapper could have an implicit conversion to std::function)) <br><br>It's a little more text, but doesn't require an extension to the standard library, and can be used independently.<br><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Wed, Oct 1, 2014 at 11:38 AM, Jared Grubb <span dir="ltr"><<a href="mailto:jared.grubb@gmail.com" target="_blank">jared.grubb@gmail.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">== Background:<br>
std::function will wrap anything that is callable (and can be copied/moved). Blocks are copyable and callable, however you need to use the reference counting Block_copy/Block_release functions.<br>
<br>
== Request for Comment on the Patch:<br>
I am working on a patch that will allow std::function to capture blocks correctly (under the right feature guards).<br>
<br>
Functionally, the patch is complete. However, it's not checkin-ready as I had a couple questions on the approach:<br>
 * Is the approach right? I specialized the __func storage class, as that seems to be the right thing to customize.<br>
 * I have included some unit test implementations. There are quite a few std::function unit tests, so I wanted to make sure I was on the right track before I do all of them.<br>
 * Should I add tests for ObjC++ code, under ARC and non-ARC scenarios? There are no ObjC++ files in libcxx, and the test-runner does not yet support them. Adding this is not hard, but it's a change in how things are today.<br>
<br>
If this looks like it's on the right track, I will flush out the rest of the unit tests, and optionally add ObjC++ unit tests.<br>
<br>
<br><br>
<br></div></div>
Jared<br>
<br>
<br>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div></div>
<br>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>