Suponiendo que los únicos tipos que se pueden pasar como argumentos a un operador son tipos que se pueden definir dentro del lenguaje.
Argumentaría que cualquier tipo que pueda ser reconocido por el compilador se puede pasar como argumento, incluidos los tipos internos como "identificador". El operador tendrá dos argumentos en su representación AST, que es suficiente para permitirle definir semántica.
Otro argumento es que la teoría del lenguaje puede proporcionar un conjunto de definiciones para su vocabulario, pero no es el único.
Por ejemplo, un operador puede ser un hombre que trabaja en una máquina. Esa definición no tiene relevancia para la teoría de la programación, pero no me impedirá usar palabras clave en un lenguaje específico de dominio que exprese algo relacionado con el funcionamiento de la máquina.Del mismo modo, el término "operador" tiene una definición más amplia en matemáticas que la que es específica de la teoría de programación, y esa definición no se invalida simplemente trabajando con un lenguaje de programación.
Dicho de otra manera: si no lo llamó operador, ¿qué sería lo llama?
EDITAR
Para aclarar, mi primer argumento se refiere a la sintaxis para utilizar el operador (la llamada). Estos operadores tienen argumentos correctos que son identificadores, nombres de miembros, que el lenguaje C++ no puede expresar utilizando un tipo de datos. El lenguaje C++ tiene tienen punteros de miembro, pero no son lo mismo que los miembros, al igual que una variable no es lo mismo que un puntero a esa variable.
Supongo que es a lo que se refiere la pregunta. El parámetro correcto de esos operadores tiene un tipo que no se puede expresar o manipular normalmente en el idioma.
Lo que sucede cuando esa sintaxis se asigna a una función operator->
sobrecargada es algo diferente. La función no es el operador, es solo cómo se implementa el operador.
* enseñado *. . . . – Inverse