C++模板类与友元函数的有关问题,请高手赐教

C++模板类与友元函数的问题,请高手赐教
#include<iostream.h>
template <class T>
class X
{
private:
T n;
  public:
  X(T i) { n=i; }
  friend void f(X <T> &s)
  { s.n=2*s.n; }
  void disp()
  { cout<<"n="<<n<<endl; }
};
int main()
{
X<int> s1(2);
X<double> s2(1.23);
s1.disp();
s2.disp();
f(s1); 
f(s2);
return 0;
}
//程序运行结果:
//n=2 ?????为什么n不是4 
//n=1.23 ?????为什么n不是2.46

------解决方案--------------------
int main()
{
X<int> s1(2);
X<double> s2(1.23);
//初始化完后,s1.n = 2, s2.n = 1.23

s1.disp(); //打印s1.n,当然是n = 2
s2.disp(); //打印s2.n, 当然是n = 1.23

f(s1);
f(s2);
return 0;
}


有什么不对
------解决方案--------------------
C/C++ code
#include<iostream.h>
template <class T>
class X
{
private:
    T n;
public:
    X(T i) 
    { 
        n = i; 
    }
    friend void f(X <T> &s)
    {
        s.n = 2 * s.n; 
    }
    void disp()
    {
        cout << "n=" << n << endl;
    }
};
int main()
{
    X<int> s1(2);
    X<double> s2(1.23);

    f(s1); 
    f(s2);

    s1.disp();
    s2.disp();
    return 0;
}