[ 
https://issues.apache.org/jira/browse/KUDU-2028?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Henry Robinson resolved KUDU-2028.
----------------------------------
       Resolution: Won't Fix
    Fix Version/s: n/a

Too hard to fix relative to the investment, especially given that there are 
workarounds. 

> Async Proxy callbacks cannot capture non-copyable types
> -------------------------------------------------------
>
>                 Key: KUDU-2028
>                 URL: https://issues.apache.org/jira/browse/KUDU-2028
>             Project: Kudu
>          Issue Type: Improvement
>            Reporter: Henry Robinson
>            Assignee: Henry Robinson
>            Priority: Minor
>             Fix For: n/a
>
>
> Callbacks that are passed to {{Proxy::AsyncRequest()}} are passed by 
> reference. They are then passed by value into {{OutboundCall()}}, where that 
> copy is saved.
> This means that you can't have a callback that captures a non-copyable type:
> {code}
> unique_ptr<Foo> my_foo = make_unique<Foo>();
> auto cb = [f(move(my_foo))]() {
> };
> proxy->AsyncRequest("method", req, response, controller, cb); // <-- error, 
> missing copy c'tor for unique_ptr<Foo>
> {code}
> This is a sometimes useful idiom for passing ownership of something into the 
> callback, where it can get destroyed some time in the future, after the 
> caller has ceased to exist. 
> A solution would be for {{AsyncRequest()}} (and its generated wrappers) to 
> take a {{ResponseCallback}} by value, and to {{move()}} it until it was 
> copied. This kind of transformation has its drawbacks (if for some reason the 
> parameter doesn't get copied, it is more expensive than pass-by-reference), 
> but seems a reasonable tradeoff here.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to