#![allow(dead_code)] #![feature(rustc_attrs)] use std::cell::Cell; // Check that a type parameter which is only used in a trait bound is // not considered bivariant. #[rustc_variance] struct InvariantMut<'a,A:'a,B:'a> { //~ ERROR ['a: +, A: o, B: o] t: &'a mut (A,B) } #[rustc_variance] struct InvariantCell { //~ ERROR [A: o] t: Cell } #[rustc_variance] struct InvariantIndirect { //~ ERROR [A: o] t: InvariantCell } #[rustc_variance] struct Covariant { //~ ERROR [A: +] t: A, u: fn() -> A } #[rustc_variance] struct Contravariant { //~ ERROR [A: -] t: fn(A) } #[rustc_variance] enum Enum { //~ ERROR [A: +, B: -, C: o] Foo(Covariant), Bar(Contravariant), Zed(Covariant,Contravariant) } pub fn main() { }