Los cuatro operadores mencionados en la publicación original, =
, ()
, ->
y []
, de hecho deben ser implementados como funciones miembro no estáticos (por respectivamente C++ 98 §13.5.3/1, §13.5.4/1, §13.5.5/1 y §13.5.6/1).
El fundamento de Bjarne Stroustrup fue, como recuerdo de debates anteriores sobre el tema, mantener cierta cordura en el lenguaje, es decir, tener al menos algunas cosas en las que puede confiar sin importar cuánto haya alterado Alone Else al definir no operadores miembros para las clases existentes.
No estoy seguro de estar completamente de acuerdo con que la restricción realmente ayude con eso, pero.
EDIT: consulté a Bjarne Stroustrup sobre esto (siempre es útil) pero parece que las aparentes inconsistencias de las reglas no son más que un caso de accidente histórico congelado. Señala que "se ve peor ahora de lo que era porque nuestras reglas para los valores y las referencias han cambiado desde que se formularon las reglas de sobrecarga. Intenté examinar este tema nuevamente hace un par de años, pero me quedé sin tiempo antes de producir un completar la propuesta ".
Saludos & HTH,
PS:. Libro "El diseño y evolución de C++" es ideal para este tipo de preguntas, pero por desgracia no lo tienen.
Estoy bastante seguro de '-> *' puede ser implementado como una función no miembro. –
@James: Estás en lo cierto. @Armen: Probablemente solo miopía. – GManNickG
@James. El libro C++ en pocas palabras dice lo contrario ... –