| //! This test shows how we fail selection in a way that can influence |
| //! selection in a code path that succeeds. |
| |
| //@ revisions: next old |
| //@ ignore-compare-mode-next-solver (explicit revisions) |
| //@[next] compile-flags: -Znext-solver |
| |
| fn is_trait<T: Trait<U>, U: Default>(_: T) -> U { |
| Default::default() |
| } |
| |
| trait Trait<T> {} |
| impl<T: Send> 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() {} |