trait DefaultParam<R: ?Sized = Self> {}
impl<T> DefaultParam for T {}
fn foo() -> impl DefaultParam {}
trait Super<T: ?Sized> {}
impl<T, U> Super<T> for U {}
trait Sub: Super<Self> {}
impl<T> Sub for T {}
fn bar() -> impl Sub {}
currently unstable ways: