// 友元函数模板
/* 
格式 : 
template <typename T>
friend 返回值类型 函数名(T &参数名);
 */
#include <iostream>
using namespace std;

template <typename T>
class A
{
    // 友元函数模板，声明的友元函数名不需要加<>空泛型
    template <typename U>
    friend void show(A<U> &a);

private:
    T item;

public:
    A(T item)
    {
        this->item = item;
    }
};

template <typename U>
void show(A<U> &a)
{
    cout << "template friend item is: " << a.item << endl;
}

int main()
{
    A<int> a(15);
    show(a);

    A<float> b(15.5);
    show(b);

    return 0;
}