2023-08-19 18:20:29 -05:00
|
|
|
#![warn(clippy::implied_bounds_in_impl)]
|
|
|
|
#![allow(dead_code)]
|
|
|
|
|
|
|
|
use std::ops::{Deref, DerefMut};
|
|
|
|
|
2023-08-19 22:25:35 -05:00
|
|
|
// Only one bound, nothing to lint.
|
|
|
|
fn normal_deref<T>(x: T) -> impl Deref<Target = T> {
|
|
|
|
Box::new(x)
|
|
|
|
}
|
2023-08-19 18:20:29 -05:00
|
|
|
|
|
|
|
// Deref implied by DerefMut
|
|
|
|
fn deref_derefmut<T>(x: T) -> impl Deref<Target = T> + DerefMut<Target = T> {
|
|
|
|
Box::new(x)
|
|
|
|
}
|
|
|
|
|
2023-08-19 22:25:35 -05:00
|
|
|
trait GenericTrait<T> {}
|
|
|
|
trait GenericTrait2<V> {}
|
|
|
|
// U is intentionally at a different "index" in GenericSubtrait than `T` is in GenericTrait
|
|
|
|
trait GenericSubtrait<T, U, V>: GenericTrait<U> + GenericTrait2<V> {}
|
|
|
|
|
|
|
|
impl GenericTrait<i32> for () {}
|
|
|
|
impl GenericTrait<i64> for () {}
|
|
|
|
impl<V> GenericTrait2<V> for () {}
|
|
|
|
impl<V> GenericSubtrait<(), i32, V> for () {}
|
|
|
|
impl<V> GenericSubtrait<(), i64, V> for () {}
|
|
|
|
|
|
|
|
fn generics_implied<T>() -> impl GenericTrait<T> + GenericSubtrait<(), T, ()>
|
|
|
|
where
|
|
|
|
(): GenericSubtrait<(), T, ()>,
|
|
|
|
{
|
2023-08-19 18:20:29 -05:00
|
|
|
}
|
|
|
|
|
2023-08-19 22:25:35 -05:00
|
|
|
fn generics_implied_multi<V>() -> impl GenericTrait<i32> + GenericTrait2<V> + GenericSubtrait<(), i32, V> {}
|
2023-08-19 18:20:29 -05:00
|
|
|
|
2023-08-19 22:25:35 -05:00
|
|
|
fn generics_implied_multi2<T, V>() -> impl GenericTrait<T> + GenericTrait2<V> + GenericSubtrait<(), T, V>
|
|
|
|
where
|
|
|
|
(): GenericSubtrait<(), T, V> + GenericTrait<T>,
|
|
|
|
{
|
2023-08-19 18:20:29 -05:00
|
|
|
}
|
|
|
|
|
2023-08-19 22:25:35 -05:00
|
|
|
// i32 != i64, GenericSubtrait<_, i64, _> does not imply GenericTrait<i32>, don't lint
|
|
|
|
fn generics_different() -> impl GenericTrait<i32> + GenericSubtrait<(), i64, ()> {}
|
|
|
|
|
|
|
|
// i32 == i32, GenericSubtrait<_, i32, _> does imply GenericTrait<i32>, lint
|
|
|
|
fn generics_same() -> impl GenericTrait<i32> + GenericSubtrait<(), i32, ()> {}
|
2023-08-19 18:20:29 -05:00
|
|
|
|
|
|
|
fn main() {}
|