[][src]Crate rustc

This crate provides macros for conditional compilation according to rustc compiler version, analogous to #[cfg(...)] and #[cfg_attr(...)].


Selectors

  • #[rustc::stable]
    True on any stable compiler.

  • #[rustc::stable(1.34)]
    True on exactly the specified stable compiler.

  • #[rustc::beta]
    True on any beta compiler.

  • #[rustc::nightly]
    True on any nightly compiler or dev build.

  • #[rustc::nightly(2019-01-01)]
    True on exactly one nightly.

  • #[rustc::since(1.34)]
    True on that stable release and any later compiler, including beta and nightly.

  • #[rustc::since(2019-01-01)]
    True on that nightly and all newer ones.

  • #[rustc::before(version or date)]
    Negative of #[rustc::since(...)].

  • #[rustc::not(selector)]
    Negative of any selector; for example #[rustc::not(nightly)].

  • #[rustc::any(selectors...)]
    True if any of the comma-separated selectors is true; for example #[rustc::any(stable, beta)].

  • #[rustc::all(selectors...)]
    True if all of the comma-separated selectors are true; for example #[rustc::all(since(1.31), before(1.34))].

  • #[rustc::attr(selector, attribute)]
    For conditional inclusion of attributes; analogous to cfg_attr.


Use cases

Providing additional trait impls as types are stabilized in the standard library without breaking compatibility with older compilers; in this case u128 stabilized in Rust 1.26:

#[rustc::since(1.26)]
impl MyTrait for u128 {
    /* ... */
}

Similar but for language features; the #[must_use] attribute stabilized in Rust 1.27:

#[rustc::attr(since(1.27), must_use)]
fn f() -> MyReturn {
    /* ... */
}

Augmenting code with const as const impls are stabilized in the standard library. This use of const as an attribute is recognized as a special case by the rustc::attr macro.

use std::time::Duration;

#[rustc::attr(since(1.32), const)]
fn duration_as_days(dur: Duration) -> u64 {
    dur.as_secs() / 60 / 60 / 24
}


Attribute Macros

all
any
attr
before
beta
nightly
not
since
stable