クラスの中に同じクラスのポインタを持たせている場合、
そのポインタを使ってprivateメンバにアクセスできてしまうのですが、
これは環境依存などではない仕様なのでしょうか?

VS2005上で書いたソース

class A
{
private:
int m_val;
A* m_pNext;
public:
void SetNext(A* pNext)
{
m_pNext = pNext;
m_pNext->m_val = 1234; // エラーにならない
}
};

A a1, a2;
a1.SetNext(&a2);
a1.m_val = 1111; // エラーになる