blob: 683a4fe48317aa85f73fa2abb2a6a5f42382a8e7 [file] [log] [blame]
//@ compile-flags: -Znext-solver
//@ check-pass
// This tests checks that we update results in the provisional cache when
// we pop a goal from the stack.
#![feature(auto_traits)]
auto trait Coinductive {}
struct Foo<T>(T);
struct Bar<T>(T);
impl<T> Coinductive for Foo<T>
where
Bar<T>: Coinductive
{}
impl<T> Coinductive for Bar<T>
where
Foo<T>: Coinductive,
Bar<T>: ConstrainInfer,
{}
trait ConstrainInfer {}
impl ConstrainInfer for Bar<u8> {}
impl ConstrainInfer for Foo<u16> {}
fn impls<T: Coinductive>() -> T { todo!() }
fn constrain<T: ConstrainInfer>(_: T) {}
fn main() {
// This should constrain `_` to `u8`.
impls::<Foo<_>>();
}