= help: the trait `std::iter::Iterator` is not implemented for `&str`
= note: required by `std::iter::IntoIterator::into_iter`
```
+
+If you need to filter on multiple attributes, you can use `all` in the following way:
+
+```rust,compile_fail
+#[rustc_on_unimplemented(
+ on(
+ all(_Self="&str", T="std::string::String"),
+ note="you can coerce a `{T}` into a `{Self}` by writing `&*variable`"
+ )
+)]
+pub trait From<T>: Sized { /* ... */ }
+```
\ No newline at end of file
/// [`from`]: trait.From.html#tymethod.from
/// [book]: ../../book/ch09-00-error-handling.html
#[stable(feature = "rust1", since = "1.0.0")]
+#[rustc_on_unimplemented(
+ on(
+ all(_Self="&str", T="std::string::String"),
+ note="you can coerce a `{T}` into a `{Self}` by writing `&*variable`"
+ )
+)]
pub trait From<T>: Sized {
/// Performs the conversion.
#[stable(feature = "rust1", since = "1.0.0")]
--- /dev/null
+fn foo<'a, T>(_t: T) where T: Into<&'a str> {}
+
+fn main() {
+ foo(String::new());
+ //~^ ERROR the trait bound `&str: std::convert::From<std::string::String>` is not satisfied
+}
--- /dev/null
+error[E0277]: the trait bound `&str: std::convert::From<std::string::String>` is not satisfied
+ --> $DIR/into-str.rs:4:5
+ |
+LL | foo(String::new());
+ | ^^^ the trait `std::convert::From<std::string::String>` is not implemented for `&str`
+ |
+ = note: you can coerce a `std::string::String` into a `&str` by writing `&*variable`
+ = note: required because of the requirements on the impl of `std::convert::Into<&str>` for `std::string::String`
+note: required by `foo`
+ --> $DIR/into-str.rs:1:1
+ |
+LL | fn foo<'a, T>(_t: T) where T: Into<&'a str> {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0277`.