// Origin: Mark Mitchell <mark@codesourcery.com>

int i;

template <class T>
struct S {
  S() { ++i; }

  virtual void g() {}
  virtual void f();

  static S s;
};

template <class T>
void S<T>::f() {
  s.f();
}

S<int> si;

template <class T>
S<T> S<T>::s;

int main ()
{
  si.g();
  if (i != 2)
    return 1;
  else
    return 0;
}
