どっちも一長一短だな

// --- fig1 ---------------------------
template <typename T> struct X {
template <typename U> friend void f(X<U>&)
{
X<int> a;
a.y = 0;
}
private:
int y;
};
main()
{
X<void> x;
f(x);
}
この場合、
・Borland 5.5.1 は private のみを問題視
・g++ 4.1.0 は X<void> で宣言された f と X<int> で宣言された f が曖昧と言ってくる
俺は g++ に賛成