Tracking Issue for #![feature(phantom_variance_markers)] · Issue #135806 · rust-lang/rust (original) (raw)

Skip to content

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

@jhpratt

Description

@jhpratt

Feature gate: #![feature(phantom_variance_markers)]

This is a tracking issue for phantom variance markers, which are identical to PhantomData but provide a self-documenting variance rather than contrived types such as PhantomData<fn() -> T> to indicate contravariance.

Public API

// in core::marker

pub struct PhantomCovariant<T: ?Sized>(/* ... /); pub struct PhantomInvariant<T: ?Sized>(/ ... /); pub struct PhantomContravariant<T: ?Sized>(/ ... /); pub struct PhantomCovariantLifetime<'a>(/ ... /); pub struct PhantomInvariantLifetime<'a>(/ ... /); pub struct PhantomContravariantLifetime<'a>(/ ... */);

pub trait Variance: Sealed {} impl<T: ?Sized> Variance for PhantomCovariant {} impl<T: ?Sized> Variance for PhantomInvariant {} impl<T: ?Sized> Variance for PhantomContravaiant {} impl<T: ?Sized> Variance for PhantomCovariantLifetime {} impl<T: ?Sized> Variance for PhantomInvariantLifetime {} impl<T: ?Sized> Variance for PhantomContravaiantLifetime {}

pub fn variance<T: Variance>() -> T {}

// also the trait impls you would expect; identical to PhantomData

Steps / History

Unresolved Questions

  1. https://std-dev-guide.rust-lang.org/feature-lifecycle/stabilization.html