Union étiquetée (tagged union)
Type union doté d'un champ « étiquette » explicite indiquant la variante active. L'union C/C++ n'est pas étiquetée (mémoire brute partagée, source d'erreurs à l'exécution) ; l'union étiquetée porte une information de type que le compilateur peut vérifier.
TypeScript : l'union discriminée. type Result = { kind: 'ok'; value: number } | { kind: 'err'; error: string }. Le compilateur affine le type grâce à un switch sur kind. L'enum de Rust est formellement une union étiquetée — chaque variante a un discriminant implicite. C++ : std::variant + std::visit. Usages classiques : types de réponses d'API, machines à états, nœuds d'AST dans un parseur. Les systèmes de types modernes rendent les unions étiquetées sûres ; la syntaxe union héritée du C est dangereuse (on peut lire le mauvais champ, comportement indéfini).