// ignore-tidy-linelength #![feature(rustc_attrs)] pub mod Bar { #[rustc_on_unimplemented = "test error `{Self}` with `{Bar}` `{Baz}` `{Quux}` in `{Foo}`"] pub trait Foo {} } use Bar::Foo; fn foobar>() -> T { panic!() } #[rustc_on_unimplemented="a collection of type `{Self}` cannot be built from an iterator over elements of type `{A}`"] trait MyFromIterator { /// Builds a container with elements from an external iterator. fn my_from_iter>(iterator: T) -> Self; } fn collect, B: MyFromIterator>(it: I) -> B { MyFromIterator::my_from_iter(it) } pub fn main() { let x = vec![1u8, 2, 3, 4]; let y: Option> = collect(x.iter()); // this should give approximately the same error for x.iter().collect() //~^ ERROR let x: String = foobar(); //~ ERROR }