// Test whether exception specifier dependent on template parameter | |
// is accepted during template decl processing. | |
// { dg-do run } | |
extern "C" void abort(); | |
class A {}; | |
template <class T> | |
struct B | |
{ | |
typedef A E; | |
}; | |
template <class T> | |
struct C | |
{ | |
typedef B<T> D; | |
typedef typename D::E E; | |
void f() throw(E) { throw E(); } | |
}; | |
int main() | |
{ | |
int caught = 0; | |
try | |
{ | |
C<int> x; | |
x.f(); | |
} | |
catch (A) | |
{ | |
++caught; | |
} | |
if (caught != 1) | |
abort (); | |
return 0; | |
} |