1 // { dg-do run  }
2 // { dg-options "-fexceptions" }
3 
4 #include <typeinfo>
5 #include <stdexcept>
6 
7 class A {
8 public:
j()9   virtual void j () {}
10 };
11 
12 class B : public A { };
13 
x(A & a)14 void x (A& a) {
15   // These should all work.
16   const B& b2 = dynamic_cast<B&>(a);
17   const B& b3 = dynamic_cast<const B&>((const A&)a);
18   const B& b4 = dynamic_cast<const B&>(a);
19 }
20 
main()21 int main() {
22   try {
23     B b;
24     x (b);
25   } catch (std::exception& e) {
26     // If we get a bad_cast, it is wrong.
27     return 1;
28   }
29 }
30