but this one does not, due to the requirement std::is_nothrow_move_constuctibleseastar::smp::invoke_on_others([b=seastar::sstring{"b"}]{ std::ignore = b; }).get();
note that this asymmetry is not present with a sharded service.
I understand that the proper solution would be to use a foreign_ptr, but it seems strange that invoke_on_others is stricter.
I think it's actually failing because std::is_nothrow_copy_constructible is not satisfied. And it seems to me that invoke_on_all should also require std::is_nothrow_copy_constructible, which it doesn't.
Consider this unit test:
this compiles
seastar::smp::invoke_on_all([b=seastar::sstring{"b"}]{ std::ignore = b; }).get();
but this one does not, due to the requirement
std::is_nothrow_move_constuctible
seastar::smp::invoke_on_others([b=seastar::sstring{"b"}]{ std::ignore = b; }).get();
note that this asymmetry is not present with a sharded service.
I understand that the proper solution would be to use a foreign_ptr, but it seems strange that invoke_on_others is stricter.