Oh, sorry -- I don't have a solution to your OP, and the rest of my comment was just sort of a drive-by comment. Here's what I percieved your general version to be:
impl<T, E> From<&T> for Single<E>
where
T: Clone + Into<Self>,
{
fn from(src: &T) -> Self {
src.clone().into()
}
}
You can comment out the From<i32> version in place of the From<E> version to see it works with concrete From implementations but not the generic one (as the generic one includes all references too). I don't think there's a way around this.
In your latest playground:
impl<T> From<&T> for Single<T>
// ...
By definition this can only remove a single reference layer; you're going from &T to T (along with the latter being inside a Single).