The trait solver doesn't know that `A` is always a tuple type, so this is

still possible. With this in mind, the compiler emits the overlap error.

## Modification

For compatibility with [`boxed_closure_impls`][boxed_closure_impls],

we now have a slightly modified version of `FnBox`:

Before the introduction of [`unsized_locals`][unsized_locals], we had been unable to provide the former impls. That means, unlike `&dyn Fn()` or `&mut dyn FnMut()` we could not use `Box<dyn FnOnce()>` at that time.

`FnBox` has long been considered a temporary solution for `Box<FnOnce>`

problem. Since we have [`boxed_closure_impls`][boxed_closure_impls] now,

it may be deprecated and removed in the future.

`FnBox()` is an alternative approach to `Box<dyn FnBox()>` is delegated to `FnBox::call_box` which doesn't need unsized locals. As we now have `Box<dyn FnOnce()>` working, the `fnbox` feature is going to be removed.