It has been removed. You need to replace all use of @Type() from your 0.15.2 code with the new builtins. This is frustrating at first, but provides a lot of opportunity to rewrite the same code more succintly and expressively e.g using @splat()
Upgrade example:
const Storage: type = blk: {
var role_handles_fields: []const std.builtin.Type.StructField = &.{};
for(Roles) |Role| {
role_handles_fields = role_handles_fields ++ &.{.{
.name = @typeName(Role),
.type = std.AutoArrayHashMapUnmanaged(ActorId, Role),
.default_value_ptr = null,
.is_comptime = false,
.alignment = @alignOf(std.AutoArrayHashMapUnmanaged(ActorId, Role)),
}};
}
break :blk @Type(.{.@"struct" = .{
.layout = .auto,
.fields = role_handles_fields,
.decls = &.{},
.is_tuple = false,
}});
};
to
pub const Storage: type = blk: {
var field_names: []const []const u8 = &.{};
var field_types: []const type = &.{};
for(Roles) |Role| {
field_names = field_names ++ &[1][]const u8{@typeName(Role)};
field_types = field_types ++ &[1]type{std.AutoArrayHashMapUnmanaged(ActorId, Role)};
}
break :blk @Struct(
.auto,
null,
field_names,
field_types[0..],
&@splat(.{}),
);
};
(Both of the above examples could, in fairness, be made slightly more succint using arrays instead of comptime-concatenated slices)
In more trivial cases, where all you need to do is make e.g. a packed struct with a bit for each value of an enum, code that previously required a block can be achieved using only the @Struct() builtin, std.meta.fieldNames(Enum), &@splat(bool) and &@splat(.{}).