Zig can sort of do it. There's no operator overloading, but it does have generics. It also doesn't allow unicode directly in literals, but it works via the @".." syntax, which is for accessing otherwise illegal literals.
This is legal
const std = @import("std"); fn @"÷"(comptime T:type, a:T, b:T) T { return a/b; } fn @"²"(comptime T:type, a:T) T { return a*a; } pub fn main() !void { std.debug.print("{d}\n", .{@"÷"(f32, 10, 2)}); std.debug.print("{d}\n", .{@"²"(i32, 7)}); }