namespace ns {
struct Bar {};
} // namespace ns

template <class T> struct Foo {
  T t;
  template <class U> class Nested {
    U u;
  };
};

template <class T, class... Ss> class FooPack {
  T t;
};

int main() {
  Foo<char> t1;
  Foo<int> t2;
  Foo<Foo<int>> t3;

  FooPack<char> p1;
  FooPack<int> p2;
  FooPack<Foo<int>> p3;
  FooPack<char, int> p4;
  FooPack<char, float> p5;
  FooPack<int, int> p6;
  FooPack<int, int, int> p7;

  Foo<int>::Nested<char> n1;
  Foo<int>::Nested<ns::Bar> n2;
  // Set breakpoint here
}
