# \`dyn FnOnce\` should always be \`Sync\`

**URL:** <https://internals.rust-lang.org/t/dyn-fnonce-should-always-be-sync/16470>\
**Category:** Unsafe Code Guidelines\
**Created:** [April 14, 2022, 6:52am UTC](https://internals.rust-lang.org/t/dyn-fnonce-should-always-be-sync/16470 "2022-04-14T06:52:10Z")\
**Posts on this page:** 1\
**Showing post:** 11

<div class="post-metadata">

**Author:** ![Nemo157](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/nemo157/32/11585_2.png) [@Nemo157](https://internals.rust-lang.org/u/Nemo157)\
**Post date:** [April 14, 2022, 11:49am UTC](https://internals.rust-lang.org/t/dyn-fnonce-should-always-be-sync/16470/11 "2022-04-14T11:49:57Z")

</div>

Why should `dyn FnOnce` specifically have this magic? For another example `dyn Future` also has no `&self` operations available.

Instead of using any magic you can do this using user code trivially, see [`SyncWrapper`](https://docs.rs/sync_wrapper/latest/sync_wrapper/struct.SyncWrapper.html) which can generically allow passing non-`Sync` data around as `Sync` by blocking all `&self` access.

---

_[View the full topic](https://internals.rust-lang.org/t/dyn-fnonce-should-always-be-sync/16470)._
