The chapter 14.1 of \"C++ primer 5th edition\" reads,
An operator function must either be a member of a class or have at least one parameter of class typ
As Bjarne said in Design and Evolution, the goal was to make it easy to extend the language, not to mutate it. If you allowed overloading only builtin types, you would change the language, and allowing that went against the design goals. (For example, it would encourage the formation of mutually incompatible dialects and fracture the community.)