来个大神帮帮忙!很简单的,该怎么解决

来个大神帮帮忙!!!!!很简单的
#include <iostream>
using std::cout;
using std::endl;

template <typename T>
class ManyFriend
{
private:
T item;
public:
ManyFriend(const T & i):item(i){}
template<class P>
  friend void Showp(const P & p);
};

template <typename P>
void Showp(const P & p)
{
cout<<p.item<<endl;
}

int main()
{
ManyFriend<int> hfi1(10);
ManyFriend<int> hfi2(20);
ManyFriend<double> hfdb(10.5);

cout<<"hfi1: ";
Showp(hfi1);
cout<<"hfdb: ";
Showp(hfdb);

return 0;
}

编译不过去
               error C2667: 'Showp' : none of 2 overload have a best conversion
               error C2668: 'Showp' : ambiguous call to overloaded function
谁帮我搞定
不知道是不是我的编译器问题
我用的是VC6.0

------解决方案--------------------
编译器的问题,VC 6.0 本身对 c++ 标准的支持就不好,特别是对于后来加入 C++ 标准的标准模板库,会有很多类似楼主遇到的编译问题。

现在都 VC 11.0(VC2012)了,强烈建议楼主更新下你的开发环境。 

你的程序没有任何问题,下面是 codepad 上的结果:

http://codepad.org/zojznvOH

希望对楼主有用,Good Luck!
------解决方案--------------------
vs2010 是没有问题的。
------解决方案--------------------
换编译器吧。

珍惜生命,远离VC6!