template <class T> struct A {
  template <class U> struct B {
    template <class V> void f (V) { }
    void g () { }
  };
  template <class W> struct B<W*> {
    void h () { }
  };
};

int main ()
{
  A<int>::B<char> b;
  b.f (42);
  b.g ();
  A<double>::B<void*> b2;
  b2.h ();
}
