For enums, packed unions and packed structs, returns their backing integer type. For tagged unions, returns the backing integer type of their enum tag type.
pub fn BackingInt(comptime T: type) type
pub fn BackingInt(comptime T: type) type {
switch (@typeInfo(T)) {
.@"enum" => |info| return info.tag_type,
.@"struct" => |info| if (info.backing_integer) |Int| return Int,
.@"union" => |info| switch (info.layout) {
.@"packed" => return info.backing_integer.?,
.auto => if (info.tag_type) |EnumTag|
return @typeInfo(EnumTag).@"enum".tag_type,
.@"extern" => {},
},
else => {},
}
@compileError("expected enum, tagged union, packed union or packed struct type, found '" ++ @typeName(T) ++ "'");
}