This is one of the downsides of not having typeclasses that is often forgotten about.
You should try Lisp, ML, Haskell Julia lands regarding that matter.
Developers with math background on languages with symbols as identifiers can get quite creative.
It helps that Haskell operators are namespaced just like functions, so you can choose which operators to bring into scope from other modules.
Besides, that's not what I was saying. What I was saying it that + in Haskell means more than an overloaded operator. It means the type has access to additional methods. This gives you more information.
The core language adds ascii character notations optimized for brevity.
The library instead makes things that should require 1 argument take 2 or 3 arguments (which ranges will hopefully fix), makes value to string conversions as verbose as possible, etc...
The library can be posted as code and thus we can test it thoroughly, and discuss it based on a real implementation.
Contrast that to the language. It isn't code, it is standardize. It is written by and for lawyers in the negative sense of the word lawyers. Anything you do in the core language is hard because there are too many ways to accidentally (or intentionally) slip something evil past everybody.
C++ takes backward compatibility seriously. If I didn't have a 20 year old code base of working code to deal with I'd be working in Rust, D, Go, Java, C#, or whatever the language of the day is. (Note that because of the amount of users and time C++ often has better optimization, but if that fraction of a percent better matters you can invest in optimizer work for your chosen language and solve the problem)
And python sets let you subtract to get a difference, similar to your clever trick. I think it helps when these things are core to the language and broadly known. Otherwise you're scratching your head at what - will do.