//! Test that opaque types only pick up methods from traits in their bounds //! if the trait is imported. //! //! FIXME: always look through the bounds of an opaque type to see if there are //! methods that could be called on any of the bound traits, irrespective of //! imported traits. //@ revisions: import no_import //@[import] check-pass #[cfg(import)] use std::fmt::Debug as _; fn foo(f: &mut std::fmt::Formatter<'_>) -> impl std::fmt::Debug { if false { let x = foo(f); x.fmt(f); //[no_import]~^ ERROR: no method named `fmt` found } () } fn foo1(f: &mut std::fmt::Formatter<'_>) -> impl std::fmt::Debug { if false { let x = &mut foo(f); x.fmt(f); //[no_import]~^ ERROR: no method named `fmt` found } () } // inconsistent with this fn bar(t: impl std::fmt::Debug, f: &mut std::fmt::Formatter<'_>) { t.fmt(f); } // and the desugared version, of course fn baz(t: T, f: &mut std::fmt::Formatter<'_>) { t.fmt(f); } fn main() {}