operator ->()

systemCの記述の中にportの宣言とかで operator ->()がオーバーライドされているところがある。thisを返すようにしてあって、ポインタじゃなくてもポインタ表記できるようになってる。
#実際port類はそう書くことになってるみたい

試し。

#include <iostream>
#include <string>
using namespace std;

struct A {
	string a,b,c;
	A(string a = "foo",string b = "bar",string c = "friday") :
                a(a), b(b), c(c) {}
	A* operator ->() {
		return this;
	}
};

main()
{
	A a;
	cout << a->a << endl
	  	  << a->b << endl
		  << a->c << endl;
}

しかし、なんでそうしてるのかがサッパリ。
なんだろう? ハード設計者にはポインタと実体の区別がつかない人が多い、と思われてるんだろうか・・・?