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)});
}