| //! This test shows how we fail selection in a way that can influence | |
| //! selection in a code path that succeeds. | |
| //@ revisions: next old | |
| //@[next] compile-flags: -Znext-solver | |
| #![feature(freeze)] | |
| use std::marker::Freeze; | |
| fn is_trait<T: Trait<U>, U: Default>(_: T) -> U { | |
| Default::default() | |
| } | |
| trait Trait<T> {} | |
| impl<T: Freeze> Trait<u32> for T {} | |
| impl<T> Trait<i32> for T {} | |
| fn foo() -> impl Sized { | |
| if false { is_trait(foo()) } else { Default::default() } | |
| //~^ ERROR: type annotations needed | |
| } | |
| fn main() {} |