|
When we treat a type as opaque, either because it is explicitly
annotated as such or because it is a template that has a non-type
parameter, we need to check if the size is larger than
RUST_DERIVE_IN_ARRAY_LIMIT.
Performing this check requires information that is up the stack, in the
`Item` rather than in the `CompInfo` or `Type`. Therefore, I introduced
two traits to encapsulate whether a thing can derive `Debug` and `Copy`
(the `CanDeriveDebug` and `CanDeriveCopy` traits, respectively) and
implemented them for ALL THE THINGS. This allowes us to perform our
various checks at the level where we have access to the necessary info,
and to let sub-levels do their own checks with their sub-info.
Fixes #372.
|