This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Bug c++/15531] New: dynamic_cast fails (at runtime) when dependant on friendship of invoker


"gccbugs at contacts dot eelis dot net" <gcc-bugzilla@gcc.gnu.org> writes:

| Consider the following snippet:
| 
|   struct Base
|   {
|     virtual ~Base () {}
|   };
| 
|   class Derived : Base
|   {
|     friend int main ();
|   };
| 
|   #include <cassert>
| 
|   int main ()
|   {
|     Base * p = new Derived;
| 
|     assert(dynamic_cast<Derived *>(p)); // fails

As required by the C++ standard.  There is no way you can successfully
dynamic_cast from base class to derived class that does not publically
inherit. 

|   }
| 
| When Derived is changed to publically inherit Base, the dynamic_cast succeeds.

Yes, that is what is required by the ISO C++ standard.

The PR is invalid.

-- Gaby


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]