namespace N {
template <class T> void f(T);
void g();
namespace M {
class A {
friend void f<int>(int); static int x; };
class B {
template <class T> friend void f(T); static int x; };
class C {
friend void g(); static int x; };
template <class T> void f(T) {
M::A::x = 0; M::B::x = 0;
}
template <> void f<int>(int)
{ M::A::x = 0; } template <> void f<double>(double )
{
M::B::x = 0;
M::f<long>(0); }
void g(void)
{ M::C::x = 0; }
}
template <class T> void f(T) {
M::A::x = 0; M::B::x = 0; }
template <> void f<int>(int )
{
N::f<long>(0); M::A::x = 0;
M::B::x = 0; }
template <> void f<char>(char )
{ M::A::x = 0; }
void g(void)
{ M::C::x = 0; } }