Skip to content
TE116 · Type · error

Duplicate discriminant value

Two variants of the same enum resolved to the same integer — either two explicit `= n` values collide, or an auto-incremented value landed on one already taken.

Why this fires

Two variants of the same numeric-discriminant enum resolved to the same integer value — either two explicit = n values collide, or an auto-incremented value happens to land on one already used by an explicit discriminant.

enum Packet: u8 {
    Connect = 0,
    Data    = 0,
    //        ^ error[TE116]: duplicate discriminant 0 on `Packet::Data`
    //          (already used by `Connect`)
}

Fix it

Give each variant a distinct value:

enum Packet: u8 {
    Connect = 0,
    Data    = 1,             // ok
}

Watch out for auto-increment colliding with a later explicit value — a variant with no = n takes "previous value + 1":

enum Packet: u8 {
    Connect,                 // 0
    Data,                    // 1
    Ping    = 1,
    //        ^ error[TE116]: duplicate discriminant 1 on `Packet::Ping` (already used by `Data`)
}

See also

  • TE115 — discriminant value doesn't fit the backing type.
  • TE118 — discriminant must be an integer constant.
  • /docs/data-structures#enums — numeric enum discriminants and auto-increment.

See also

Search Zolo

9 results

en