diff options
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/meta.zig | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/std/meta.zig b/lib/std/meta.zig index 85eb6cd4d3..676d7423c6 100644 --- a/lib/std/meta.zig +++ b/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))); |
