You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Difference in definitions of new depending on a feature flag makes it impossible to create a simple sized box when needed. For example, the following code:
structS{data:usize,}let m = StackBox::<S,S1>::new(S{data:10}).unwrap();
compiles fine with default features, but fails with unsize with
the trait std::marker::Unsize<stackbox::tests::test_as_ptr::S> is not implemented for stackbox::tests::test_as_ptr::S
I'd suggest exposing same basic interface for sized values via new and create a separate feature-controlled new_unsized for when it's needed, so that compiler can distinguish and correctly resolve types in both cases.
The text was updated successfully, but these errors were encountered:
This is one of the limitations of smallbox now. You can't have a sized SmallBox with unsize feature flag on. The only formal solution is using CoerceUnsize, which can automatically coerce a sized StackBox into unsized one, or just keep it sized if coercion is not required. There is a problem on SmallBox that CoerceUnsize can't be implement for an enum. I also have a solution for it: Turn SmallBox into a struct and then track the tag information by ourselves. But it has a trade off that we have to define our own Box type to control the heap pointer, which means we would not be able to get a standard Box<T> out of it again.
I'd suggest exposing same basic interface for sized values via new and create a separate feature-controlled new_unsized for when it's needed, so that compiler can distinguish and correctly resolve types in both cases.
It definitely is a solution for the problem, I'll take it into consideration.
CoerceUnsize is implemented for SmallBox and the new method only requires T: Sized now, so you can have either a sized SmallBox or an unsized SmallBox coerced from the sized one.
Difference in definitions of
new
depending on a feature flag makes it impossible to create a simple sized box when needed. For example, the following code:compiles fine with default features, but fails with
unsize
withI'd suggest exposing same basic interface for sized values via
new
and create a separate feature-controllednew_unsized
for when it's needed, so that compiler can distinguish and correctly resolve types in both cases.The text was updated successfully, but these errors were encountered: