[−][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 tocfg_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 |