int f()
{
  return 0;
}

int f(long l)
{
  return 0;
}

template<class T>
struct A
{
  int f()
  {
    return 1;
  }
};

template<class T>
struct B
  : A<T>
{
  int g()
  {
    return f();
  }
};


template<class T>
struct C
{
  int g()
  {
    return f(0);
  }
};

int f(int i)
{
  return 1;
}


int main()
{
  B<int> b;
  C<int> c;

  return b.g() + c.g();
}
