#include <iostream>
using namespace std;
static int func( void );
int func( void ){ return 0; }
template<class T> class A;
template<class T> class A
{
template<class U> int func( void );
int func2( void ){ return 0; }
};
template<class T>
template<class U> int A<T>::func( void )
{
return 0;
}
class B
{
public:
template<class T> int func( void );
int func2( void ){ return 0; }
static int value;
};
int B::value;
template<class T> int B::func( void ){ return 0; }
class C
{
template<class T>
friend class A;
friend int func( void );
friend int B::func2( void );
template<class T>
friend int B::func( void );
template<class T>
// template<class U>
friend int A<T>::func( void );
template<class T>
friend int A<T>::func2( void );
};
int main() {
func();
B b;
b.func<int>();
C c;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RhdGljIGludCBmdW5jKCB2b2lkICk7CmludCBmdW5jKCB2b2lkICl7IHJldHVybiAwOyB9Cgp0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBBOwoKdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgQQp7CnRlbXBsYXRlPGNsYXNzIFU+IGludCBmdW5jKCB2b2lkICk7CmludCBmdW5jMiggdm9pZCApeyByZXR1cm4gMDsgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4KdGVtcGxhdGU8Y2xhc3MgVT4gaW50IEE8VD46OmZ1bmMoIHZvaWQgKQp7CglyZXR1cm4gMDsKfQoKY2xhc3MgQgp7CnB1YmxpYzoKdGVtcGxhdGU8Y2xhc3MgVD4gaW50IGZ1bmMoIHZvaWQgKTsKaW50IGZ1bmMyKCB2b2lkICl7IHJldHVybiAwOyB9CnN0YXRpYyBpbnQgdmFsdWU7Cn07CgppbnQgQjo6dmFsdWU7Cgp0ZW1wbGF0ZTxjbGFzcyBUPiBpbnQgQjo6ZnVuYyggdm9pZCApeyByZXR1cm4gMDsgfQoKY2xhc3MgQwp7CnRlbXBsYXRlPGNsYXNzIFQ+CmZyaWVuZCBjbGFzcyBBOwoKZnJpZW5kIGludCBmdW5jKCB2b2lkICk7CmZyaWVuZCBpbnQgQjo6ZnVuYzIoIHZvaWQgKTsKdGVtcGxhdGU8Y2xhc3MgVD4KZnJpZW5kIGludCBCOjpmdW5jKCB2b2lkICk7CnRlbXBsYXRlPGNsYXNzIFQ+Ci8vIHRlbXBsYXRlPGNsYXNzIFU+CmZyaWVuZCBpbnQgQTxUPjo6ZnVuYyggdm9pZCApOwp0ZW1wbGF0ZTxjbGFzcyBUPgpmcmllbmQgaW50IEE8VD46OmZ1bmMyKCB2b2lkICk7Cn07CgppbnQgbWFpbigpIHsKCQoJZnVuYygpOwoJQiBiOwoJYi5mdW5jPGludD4oKTsKCUMgYzsKCXJldHVybiAwOwp9