1 << iota

Build Status

The iota! macro constructs a set of related constants.

```rust

[macro_use]

extern crate iota;

iota! { const A: u8 = 1 << iota; | B | C | D }

fn main() { asserteq!(A, 1); asserteq!(B, 2); asserteq!(C, 4); asserteq!(D, 8); } ```

Within an iota! block, the iota variable is an untyped integer constant whose value begins at 0 and increments by 1 for every constant declared in the block.

```rust

[macro_use]

extern crate iota;

iota! { const A: u8 = 1 << iota; | B

const C: i32 = -1; // iota is not used but still incremented

pub const D: u8 = iota * 2;
        | E
        | F

}

// iota begins again from 0 in this block iota! { const G: usize = 1 << (iota + 10); | H }

fn main() { asserteq!(A, 1 << 0); asserteq!(B, 1 << 1);

assert_eq!(C, -1);

assert_eq!(D, 3 * 2);
assert_eq!(E, 4 * 2);
assert_eq!(F, 5 * 2);

assert_eq!(G, 1 << (0 + 10));
assert_eq!(H, 1 << (1 + 10));

} ```

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.