Change:
<!-- Thank you for filing a bug report! Please provide a short summary of the bug, along with any information you feel relevant to replicating the bug. --I replaced with this code after creating an empty lib: When running , I expected to see this happen: built successfully Instead, this happened: And when I followed the suggestions it offered, it turned into a type mismatch error and wanted me to cancel the borrowing. : The output of is the same as above.
So this is odd: if you move the Ord bound to the function it works fine: and if you add both bounds it stops working, which is pretty incomprehensible to me:
This is definitely related to , because removing from the function makes it work fine.
It seems that you don't even need to specify a trait bound in your code to cause this bug. The following code : which gives the following very weird output on nightly: (But anyway, there is a trait bound specified in 's source code. Hope this code helps in diagnosing this problem.)
Update: I'm not quite sure what happened, but it seems that this problem is already fixed in the latest nightly, and both code snippets can now be compiled without problem. Maybe it's time to close this issue. (This issue should be some kind of regression introduced at some point between and , according to my tests.)

Discussion:
<ins> // check-pass // // regression test for #88071 #![feature(const_btree_new)] #![feature(const_fn_trait_bound)] use std::collections::BTreeMap; pub struct CustomMap<K, V>(BTreeMap<K, V>); impl<K, V> CustomMap<K, V> where K: Ord, { pub const fn new() -> Self { CustomMap(BTreeMap::new()) } } fn main() {} </ins>

<ins> #![feature(generic_associated_types)] trait PointerFamily { type Pointer<T>; } struct Rc<T>(Box<T>); struct RcFamily; impl PointerFamily for RcFamily { type Pointer<T> = Rc<T>; } #[allow(dead_code)] enum Node<T, P: PointerFamily> where P::Pointer<Node<T, P>>: Sized { Cons(P::Pointer<Node<T, P>>), } fn main() { let _list: <RcFamily as PointerFamily>::Pointer<Node<i32, RcFamily>>; //~^ ERROR overflow evaluating the requirement `Node<i32, RcFamily>: Sized` } </ins>

<ins> error[E0275]: overflow evaluating the requirement `Node<i32, RcFamily>: Sized` --> $DIR/issue-87750.rs:20:16 | LL |     let _list: <RcFamily as PointerFamily>::Pointer<Node<i32, RcFamily>>; |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to previous error For more information about this error, try `rustc --explain E0275`. </ins>

<ins> // check-fail // // regression test for issue 52893 trait At<Name> { type AtRes; fn at(self) -> Self::AtRes; } trait Push<T> { type PushRes; fn push(self, other: T) -> Self::PushRes; } trait AddClass<Name, F> { type AddRes; fn init(self, func: F); } trait ToRef { type RefRes; fn to_ref(&self) -> Self::RefRes; } struct Class<P>(P); impl<P> Class<P> { fn with<Name, F>(self) -> <Self as AddClass<Name, F>>::AddRes where Self: AddClass<Name, F>, { todo!() } fn from<F>(self) -> <Self as AddClass<P, F>>::AddRes where Self: AddClass<P, F>, { todo!() } } impl<F, Name, P> AddClass<Name, F> for Class<P> where Self: At<Name>, <Self as At<Name>>::AtRes: Push<F>, <<Self as At<Name>>::AtRes as Push<F>>::PushRes: ToRef<RefRes = Self> + Push<F>, { type AddRes = (); fn init(self, func: F) { let builder = self.at().push(func); let output = builder.to_ref(); builder.push(output); //~ ERROR mismatched types [E0308] } } fn main() {} </ins>

<ins> error[E0308]: mismatched types --> $DIR/issue-52893.rs:53:22 | LL | impl<F, Name, P> AddClass<Name, F> for Class<P> |      - this type parameter ... LL |         builder.push(output); |                      ^^^^^^ expected type parameter `F`, found struct `Class` | = note: expected type parameter `F` found struct `Class<P>` error: aborting due to previous error For more information about this error, try `rustc --explain E0308`. </ins>

<ins> // check-fail // // regression test for #68295 struct Matrix<R, C, S>(R, C, S); impl<R, C, S> Matrix<R, C, S> { fn into_owned(self) -> Matrix<R, C, Owned<R, C, ()>> where (): Allocator<R, C>, { unimplemented!() } } impl<D, S> Matrix<D, D, S> { fn hermitian_part(&self) -> Matrix<D, D, Owned<D, D, ()>> where (): Allocator<D, D>, { unimplemented!() } } trait Allocator<R, C> { type Buffer; } trait Trait<R, C, A> { type Power; } impl<R, C, A: Allocator<R, C>> Trait<R, C, A> for () { type Power = A::Buffer; } type Owned<R, C, G> = <G as Trait<R, C, ()>>::Power; fn crash<R, C>(input: Matrix<R, C, ()>) -> Matrix<R, C, u32> where (): Allocator<R, C>, { input.into_owned() //~^ ERROR mismatched types [E0308] } fn main() {} </ins>

<ins> error[E0308]: mismatched types --> $DIR/issue-68295.rs:43:5 | LL | fn crash<R, C>(input: Matrix<R, C, ()>) -> Matrix<R, C, u32> |                                            ----------------- expected `Matrix<R, C, u32>` because of return type ... LL |     input.into_owned() |     ^^^^^^^^^^^^^^^^^^ expected `u32`, found associated type | = note: expected struct `Matrix<_, _, u32>` found struct `Matrix<_, _, <() as Allocator<R, C>>::Buffer>` = help: consider constraining the associated type `<() as Allocator<R, C>>::Buffer` to `u32` = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html error: aborting due to previous error For more information about this error, try `rustc --explain E0308`. </ins>