// Test whether exception specifier dependent on template parameter // is accepted during template decl processing. // { dg-do run } extern "C" void abort(); class A {}; template struct B { typedef A E; }; template struct C { typedef B D; typedef typename D::E E; void f() #if __cplusplus <= 201402L throw(E) // { dg-warning "deprecated" "" { target { c++11 && { ! c++17 } } } } #endif { throw E(); } }; int main() { int caught = 0; try { C x; x.f(); } catch (A) { ++caught; } if (caught != 1) abort (); return 0; }