blob: d98ef60e6d6f8036162e90b18ab770297ee68de2 [file] [log] [blame]
// Note: If you change this test, change 'trivial_bounds-feature-gate.rs' at the same time.
// trivial_bounds
// Tracking issue: https://github.com/rust-lang/rust/issues/48214
#![feature(trivial_bounds)]
#![deny(trivial_bounds)]
#![allow(dead_code)]
use std::marker::{PhantomData, PhantomPinned};
fn inner() {
struct Inner(PhantomPinned);
struct A(PhantomPinned);
impl Unpin for A where PhantomPinned: Unpin {} //~ ERROR Unpin does not depend on any type or lifetime parameters
struct B(Inner);
impl Unpin for B where Inner: Unpin {} //~ ERROR Unpin does not depend on any type or lifetime parameters
struct Wrapper<T>(T);
impl<T> Unpin for Wrapper<T> where T: Unpin {}
struct C(Inner);
impl Unpin for C where Wrapper<Inner>: Unpin {} //~ ERROR Unpin does not depend on any type or lifetime parameters
struct WrapperWithLifetime<'a, T>(PhantomData<&'a ()>, T);
impl<T> Unpin for WrapperWithLifetime<'_, T> where T: Unpin {}
struct D(Inner);
impl<'a> Unpin for D where WrapperWithLifetime<'a, Inner>: Unpin {} // Ok
}
fn main() {}