30 lines
484 B
C
30 lines
484 B
C
// { dg-do run }
|
|
// { dg-options "-fexceptions" }
|
|
|
|
#include <typeinfo>
|
|
#include <stdexcept>
|
|
|
|
class A {
|
|
public:
|
|
virtual void j () {}
|
|
};
|
|
|
|
class B : public A { };
|
|
|
|
void x (A& a) {
|
|
// These should all work.
|
|
const B& b2 = dynamic_cast<B&>(a);
|
|
const B& b3 = dynamic_cast<const B&>((const A&)a);
|
|
const B& b4 = dynamic_cast<const B&>(a);
|
|
}
|
|
|
|
int main() {
|
|
try {
|
|
B b;
|
|
x (b);
|
|
} catch (std::exception& e) {
|
|
// If we get a bad_cast, it is wrong.
|
|
return 1;
|
|
}
|
|
}
|