const print = @import("std").debug.print; const SomeStruct = struct { inner: ?usize = null }; pub fn Box(comptime T: type) type { return struct { inner: ?*T, fn drop(self: *Box(T)) void { self.inner.?.* = SomeStruct{ .inner = 1000 }; } }; } pub fn main() void { var s = SomeStruct{}; var box = Box(SomeStruct){ .inner = &s }; s.inner = 100; print("{any}\n", .{box.inner == &s}); print("{any}\n", .{box.inner.?.inner}); box.drop(); print("{any}\n", .{box.inner == &s}); print("{any}\n", .{box.inner}); print("{any}\n", .{s}); }