Interesting problem, it seems that the builtin calls are name checked during the AstGen step and so it complains before evaluating the comptime if.
I was able to get the following to work using a conditional module in the build.zig:
// build.zig
pub fn build(b: *std.Built) void {
//...
const abs = if (@import("builtin").zig_version.minor > 11)
b.addModule("abs", .{ .source_file = .{ .path = "src/abs.zig" } })
else
b.addModule("abs", .{ .source_file = .{ .path = "src/fabs.zig" } });
exe.addModule("abs", abs);
//...
}
// src/abs.zig
pub inline fn abs(a: anytype) @TypeOf(@abs(a)) {
return @abs(a);
}
// src/fabs.zig
pub inline fn abs(a: anytype) @TypeOf(@fabs(a)) {
return @fabs(a);
}