#include <iostream>
using namespace std;
template<class T>
class myclass;
template<class T>
void f(myclass<T> &c);
template<class T>
class myclass
{
private:
T value;
public:
template<typename U>
friend void f(myclass<U> &c);
T getvalue()
{
return value;
}
void setvalue(T v)
{
value=v;
}
};
template<class T>
void f(myclass<T> &c)
{
cout<<endl<<"function called:\n";
cout<<c.getvalue()<<endl;
}
int main()
{
myclass<int> object;
object.setvalue(6);
f(object);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgbXljbGFzczsKCnRlbXBsYXRlPGNsYXNzIFQ+CnZvaWQgZihteWNsYXNzPFQ+ICZjKTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIG15Y2xhc3MKewogICAgcHJpdmF0ZToKVCB2YWx1ZTsKcHVibGljOgoKdGVtcGxhdGU8dHlwZW5hbWUgVT4KZnJpZW5kIHZvaWQgZihteWNsYXNzPFU+ICZjKTsKVCBnZXR2YWx1ZSgpCnsKICAgIHJldHVybiB2YWx1ZTsKfQp2b2lkIHNldHZhbHVlKFQgdikKewogICAgdmFsdWU9djsKfQp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4Kdm9pZCBmKG15Y2xhc3M8VD4gJmMpCnsKY291dDw8ZW5kbDw8ImZ1bmN0aW9uIGNhbGxlZDpcbiI7CmNvdXQ8PGMuZ2V0dmFsdWUoKTw8ZW5kbDsKfQppbnQgbWFpbigpCnsKbXljbGFzczxpbnQ+IG9iamVjdDsKb2JqZWN0LnNldHZhbHVlKDYpOwpmKG9iamVjdCk7CnJldHVybiAwOwp9