Commit cf90a5e451

Justus Klausecker <justus@klausecker.de>
2025-08-17 18:35:12
langref: add documentation for unions with inferred tag and explicit tag values
1 parent c315f2b
doc/langref/test_tagged_union_with_tag_values.zig
@@ -0,0 +1,17 @@
+const std = @import("std");
+const expect = std.testing.expect;
+
+const Tagged = union(enum(u32)) {
+    int: i64 = 123,
+    boolean: bool = 67,
+};
+
+test "tag values" {
+    const int: Tagged = .{ .int = -40 };
+    try expect(@intFromEnum(int) == 123);
+
+    const boolean: Tagged = .{ .boolean = false };
+    try expect(@intFromEnum(boolean) == 67);
+}
+
+// test
doc/langref.html.in
@@ -2469,6 +2469,13 @@ or
       </p>
       {#code|test_union_method.zig#}
 
+      <p>
+      Unions with inferred enum tag types can also assign ordinal values to their inferred tag.
+      This requires the tag to specify an explicit integer type.
+      {#link|@intFromEnum#} can be used to access the ordinal value corresponding to the active field.
+      </p>
+      {#code|test_tagged_union_with_tag_values.zig#}
+
       <p>
       {#link|@tagName#} can be used to return a {#link|comptime#}
       {#syntax#}[:0]const u8{#endsyntax#} value representing the field name: