/* { dg-do compile } */
/* { dg-options "-O2 -std=c++11" } */

struct A {};
struct B {};
struct C { using p = int *; template <typename> using ra = A; };
struct J : C { template <typename> struct K { typedef C::ra<int> o; }; };
template <typename> struct D
{
  struct H : J::K<int>::o { H (J::p, A) : J::K<int>::o () {} };
  H d;
  D (const char *, const A &x = A ()) : d (0, x) {}
};
extern template class D<char>;
enum L { M };
struct F { virtual char *foo (); };
template <class> struct I : B { static int foo (int) { return 0; } };
struct G { typedef I<int> t; };
void foo (int) { G::t::foo (0); }
void bar (const D<char> &, const D<int> &, int, L);
void baz () try { foo (0); } catch (F &e) { bar (e.foo (), "", 0, M); }
