Commit f1b6f1aeb3
Changed files (1)
lib
std
lib/std/meta.zig
@@ -1203,6 +1203,14 @@ pub inline fn hasUniqueRepresentation(comptime T: type) bool {
.Pointer => |info| info.size != .Slice,
+ .Optional => |info| switch (@typeInfo(info.child)) {
+ .Pointer => |ptr| !ptr.is_allowzero and switch (ptr.size) {
+ .Slice, .C => false,
+ .One, .Many => true,
+ },
+ else => false,
+ },
+
.Array => |info| hasUniqueRepresentation(info.child),
.Struct => |info| {
@@ -1301,8 +1309,15 @@ test hasUniqueRepresentation {
try testing.expect(!hasUniqueRepresentation(T));
}
+ try testing.expect(hasUniqueRepresentation(*u8));
+ try testing.expect(hasUniqueRepresentation(*const u8));
+ try testing.expect(hasUniqueRepresentation(?*u8));
+ try testing.expect(hasUniqueRepresentation(?*const u8));
+
try testing.expect(!hasUniqueRepresentation([]u8));
try testing.expect(!hasUniqueRepresentation([]const u8));
+ try testing.expect(!hasUniqueRepresentation(?[]u8));
+ try testing.expect(!hasUniqueRepresentation(?[]const u8));
try testing.expect(hasUniqueRepresentation(@Vector(std.simd.suggestVectorLength(u8) orelse 1, u8)));
try testing.expect(@sizeOf(@Vector(3, u8)) == 3 or !hasUniqueRepresentation(@Vector(3, u8)));