| // Tests that we cannot assume that an opaque type does *not* implement some |
| // other trait |
| #![feature(type_alias_impl_trait)] |
| |
| trait OpaqueTrait {} |
| impl<T> OpaqueTrait for T {} |
| type OpaqueType = impl OpaqueTrait; |
| fn mk_opaque() -> OpaqueType { |
| () |
| } |
| |
| #[derive(Debug)] |
| struct D<T>(T); |
| |
| trait AnotherTrait {} |
| impl<T: std::fmt::Debug> AnotherTrait for T {} |
| |
| // This is in error, because we cannot assume that `OpaqueType: !Debug` |
| impl AnotherTrait for D<OpaqueType> { |
| //~^ ERROR conflicting implementations of trait `AnotherTrait` for type `D<OpaqueType>` |
| } |
| |
| fn main() {} |