Saltar al contenido
TE116 · Tipos · error

Valor de discriminante duplicado

Dos variantes del mismo enum resolvieron al mismo entero — o dos `= n` explícitos colisionan, o un valor autoincrementado cayó sobre uno ya usado.

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.

Véase también

Buscar en Zolo

9 resultados

en