On Oct 3, 2010, at 1:01 PM, Douglas Gregor wrote: > > On Oct 3, 2010, at 9:55 AM, Howard Hinnant wrote: > >> On Oct 3, 2010, at 12:53 PM, Douglas Gregor wrote: >> >>> >>> On Oct 3, 2010, at 6:59 AM, Howard Hinnant wrote: >>> >>>> Author: hhinnant >>>> Date: Sun Oct 3 08:59:56 2010 >>>> New Revision: 115461 >>>> >>>> URL: http://llvm.org/viewvc/llvm-project?rev=115461&view=rev >>>> Log: >>>> Tweak to make clang blocks work with std::functional (very fragile) >>> >>> Won't we need _Block_copy calls when putting a block into a std::function, >>> _Block_dispose when destroying that std::function, etc? >> >> <shrug> I don't know. If so then I would think it unsafe to instantiate any >> template with a block (not just std::function). Such behavior doesn't >> follow C++ generic syntax/semantics. > > IIUC, it's actually a library policy issue. My understanding is that blocks > effectively capture by reference until you call _Block_copy, so when a > library function accepts a block parameter it either (1) agrees to call it > immediately, while the caller is still on that stack, or (2) _Block_copy the > block to save a copy of the block elsewhere and run it later. > > Since std::function is mainly a mechanism for "save a copy of the function > object to call later", I think it makes sense to _Block_copy/_Block_dispose > automatically.
Ok, I'll look into it when I have a compiler that has all of the needed language features to do the job correctly: 1. blocks 2. rvalue refs 3. variadic templates. The current function support clang is taking advantage of is nothing but a stub and destined to disappear. -Howard _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
