The following code fails to compile struct A { virtual ~A() {}; //make A polymorphic };
struct B: public A { template <typename T2> class C { public: static void f (A& a) { dynamic_cast<B&>( a ).g(); } }; void g () {} }; ... and issues the following Error message: test.cpp: In static member function 'static void B::Update<T2>::g(A&)': test.cpp:21: error: request for member 'g' in 'dynamic_cast<B&>(a)', which is of non-class type 'B&' On the other hand, it works if either C is not a template or B is a template. this fails for 4.1.3, 4.2.2 and 4.3.0 -- Summary: [4.1/4.2/4.3] class& is not known as as a class-type anymore after dynamic_cast Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rbuergel at web dot de http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34364