Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Fix evaluation overflow #53687

Conversation

GuillaumeGomez
Copy link
Member

Fixes #52873.

Currently, it fails to evaluate this code. By replacing this line, instead of a bug we get a nice infinite recursion:

error[E0275]: overflow evaluating the requirement `_: core::marker::Sized`
  |
  = help: consider adding a `#![recursion_limit="128"]` attribute to your crate
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<_, _>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `private::PrivatePow<uint::UInt<uint::UTerm, bit::B1>, uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`
  = note: required because of the requirements on the impl of `type_operators::Pow<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<uint::UInt<_, _>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>, bit::B0>>` for `uint::UTerm`

error: Could not document `typenum`.

So I assume the simplification is failing for some reasons in predicate_may_hold.

cc @eddyb @nikomatsakis

@rust-highfive
Copy link
Collaborator

r? @nikomatsakis

(rust_highfive has picked a reviewer for you, use r? to override)

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 24, 2018
@pietroalbini pietroalbini added beta-nominated Nominated for backporting to the compiler in the beta channel. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 25, 2018
@GuillaumeGomez
Copy link
Member Author

@nikomatsakis I'll need your help on this one (@eddyb said you were the one to ask for)

@@ -175,7 +175,7 @@ impl<'a, 'tcx> Lift<'tcx> for traits::SelectionError<'a> {
super::ConstEvalFailure(ref err) => tcx.lift(&**err).map(|err| super::ConstEvalFailure(
err.into(),
)),
super::Overflow => bug!(), // FIXME: ape ConstEvalFailure?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, I'm .. not entirely sure why this was bug! to begin with. It seems like it could just be Some(super::Overflow), instead?

@GuillaumeGomez GuillaumeGomez force-pushed the predicate_may_hold-failure branch from a72286a to 632f9c4 Compare August 28, 2018 22:16
@GuillaumeGomez
Copy link
Member Author

@nikomatsakis I made the replacement, and as expected: it still fails at the same place but with the following error message:

Overflow should be caught earlier in standard query mode: OverflowError

@nikomatsakis
Copy link
Contributor

hmm.

@pietroalbini
Copy link
Member

Ping @nikomatsakis @GuillaumeGomez! 1.29 is going to be released in a bit more than a week!

@GuillaumeGomez
Copy link
Member Author

Still waiting for @nikomatsakis at last news. Don't know if he had time to look at it.

@nikomatsakis
Copy link
Contributor

nikomatsakis commented Sep 6, 2018

@GuillaumeGomez I was waiting on you to minimize a test case =)

@nikomatsakis
Copy link
Contributor

Seems like we miscommunicated!

@GuillaumeGomez
Copy link
Member Author

Woups, indeed, sorry about that!

@GuillaumeGomez
Copy link
Member Author

@nikomatsakis After a long try, it seems that it comes more from the number of possibilities than anything specific. With this small sample of code, it works as expected:

use std::marker::PhantomData;

pub trait Unsigned {}

pub trait PrivatePow<Y, N> {
    type Output;
}

pub type PrivatePowOut<A, Y, N> = <A as PrivatePow<Y, N>>::Output;

pub trait Pow<N> {
    type Output;

    fn powi(self, x: N) -> Self::Output;
}

pub struct UTerm;
pub struct B1;
pub struct UInt<U, B> {
    _marker: PhantomData<(U, B)>,
}

pub type U1 = UInt<UTerm, B1>;

impl<X: Unsigned, N: Unsigned> Pow<N> for X
where
    X: PrivatePow<U1, N>,
{
        type Output = PrivatePowOut<X, U1, N>;
        fn powi(self, _: N) -> Self::Output {
            unsafe { ::core::mem::uninitialized() }
        }
}

Adding a few more types matching the blanket impl will certainly allow to get the ICE again but couldn't find how much exactly...

@pietroalbini
Copy link
Member

FYI, beta->stable promotion should happen on Monday, so if we want to get the regression fixed we need to ideally get this landed on master and approved for backport by Sunday.

@Mark-Simulacrum
Copy link
Member

@nikomatsakis @GuillaumeGomez @rust-lang/rustdoc This is highly likely to slip into the 1.29 release at this point unless we can get an implementation and review in the next ~12-15 hours. Is that acceptable? I'm not sure how serious this issue is.

@QuietMisdreavus
Copy link
Member

If the bug is happening while evaluating blanket impls, the solution for beta is to disable blanket impls. That buys us another release to get this sorted properly.

@QuietMisdreavus
Copy link
Member

I will likely go to sleep before my build can finish, so if someone wants to beat me to it, blanket impls can be disabled on beta by commenting/removing this line (and possibly the related get_blanket_impls function if it complains about dead code). Then make sure the ICE doesn't occur when documenting typenum.

@nikomatsakis
Copy link
Contributor

Sorry for my inattention here. I'm still feeling uncertain about the changes here. I don't really understand what is happening. I was also unable to minimize. I will investigate for a few hours today and make a call one way or the other on what to do.

@nikomatsakis
Copy link
Contributor

Backporting a quick-n-dirty patch to fix up rustdoc may be fine, though.

@pnkfelix
Copy link
Member

discussed at compiler team meeting. Decided we are unlikely to accept this PR into beta even if it is r+'ed in its current state. So, removing beta-nomination tag.

If a reviewer decides that some future form of the PR is worth considering for backport, please renominate.

@nikomatsakis
Copy link
Contributor

(If that's what you were suggesting @QuietMisdreavus)

@pnkfelix pnkfelix removed the beta-nominated Nominated for backporting to the compiler in the beta channel. label Sep 13, 2018
@pietroalbini
Copy link
Member

This was already backported in #54104, FYI.

@QuietMisdreavus
Copy link
Member

@pietroalbini called it, I wrote the "quick and dirty" patch for beta and it was able to get it merged in before it was promoted to today's release.

@eddyb
Copy link
Member

eddyb commented Sep 13, 2018

To be clear, what was backported is not a tentative fix, but rather disabling the feature that still needs to be fixed, so people don't get ICEs, the feature is just "delayed" for another release cycle?

@QuietMisdreavus
Copy link
Member

@eddyb Correct. As the feature had not landed on stable yet, i "delayed its introduction" by removing it from the beta branch as it was being promoted to stable.

@nikomatsakis
Copy link
Contributor

Seems good.

@nikomatsakis
Copy link
Contributor

Closing in favor of #54199

@GuillaumeGomez GuillaumeGomez deleted the predicate_may_hold-failure branch September 13, 2018 20:02
bors added a commit that referenced this pull request Sep 26, 2018
overlook overflows in rustdoc trait solving

Context:

The new rustdoc "auto trait" feature walks across impls and tries to run trait solving on them with a lot of unconstrained variables. This is prone to overflows. These overflows used to cause an ICE because of a caching bug (fixed in this PR). But even once that is fixed, it means that rustdoc causes an overflow rather than generating docs.

This PR therefore adds a new helper that propagates the overflow error out. This requires rustdoc to then decide what to do when it encounters such an overflow: technically, an overflow represents neither "yes" nor "no", but rather a failure to make a decision. I've decided to opt on the side of treating this as "yes, implemented", since rustdoc already takes an optimistic view. This may prove to include too many items, but I *suspect* not.

We could probably reduce the rate of overflows by unifying more of the parameters from the impl -- right now we only seem to consider the self type. Moreover, in the future, as we transition to Chalk, overflow errors are expected to just "go away" (in some cases, though, queries might return an ambiguous result).

Fixes #52873

cc @QuietMisdreavus -- this is the stuff we were talking about earlier
cc @GuillaumeGomez -- this supersedes #53687
Mark-Simulacrum pushed a commit to Mark-Simulacrum/rust that referenced this pull request Nov 7, 2018
…re, r=eddyb

overlook overflows in rustdoc trait solving

Context:

The new rustdoc "auto trait" feature walks across impls and tries to run trait solving on them with a lot of unconstrained variables. This is prone to overflows. These overflows used to cause an ICE because of a caching bug (fixed in this PR). But even once that is fixed, it means that rustdoc causes an overflow rather than generating docs.

This PR therefore adds a new helper that propagates the overflow error out. This requires rustdoc to then decide what to do when it encounters such an overflow: technically, an overflow represents neither "yes" nor "no", but rather a failure to make a decision. I've decided to opt on the side of treating this as "yes, implemented", since rustdoc already takes an optimistic view. This may prove to include too many items, but I *suspect* not.

We could probably reduce the rate of overflows by unifying more of the parameters from the impl -- right now we only seem to consider the self type. Moreover, in the future, as we transition to Chalk, overflow errors are expected to just "go away" (in some cases, though, queries might return an ambiguous result).

Fixes rust-lang#52873

cc @QuietMisdreavus -- this is the stuff we were talking about earlier
cc @GuillaumeGomez -- this supersedes rust-lang#53687
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants