我有以下一对实现(playground link):
pub struct Foo<T> {it: T}
impl<T: IntoIterator> From<T> for Foo<T::IntoIter> {
fn from(x: T) -> Foo<T::IntoIter> {
Foo { it: x.into_iter() }
}
}
use std::str::Chars;
impl From<&'static str> for Foo<Chars<'static>> {
fn from(x: &'static str) -> Foo<Chars<'static>> {
Foo { it: x.chars() }
}
}
我得到了conflicting implementations error
但我不明白为什么。据我所知,第一个通用impl无法涵盖From<&'static str>
,因为&str
不实现IntoIterator
。
编译器不够聪明,无法弄明白吗?是否有原因这不应该被允许(例如,一个深奥的孤儿规则)?有办法吗?