From 0585c96a3bceae440cfe455687e62def82ed8d75 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 4 May 2021 23:14:41 +0200 Subject: [PATCH] Restore wxObject::ms_classInfo public access This undoes accidental change of ms_classInfo from public to protected in 95c98a0b5f (Work around -Wuggest-override for event table macros from gcc 11, 2021-04-25). Also add a unit test checking that using wxCLASSINFO(wxObject) compiles and works as expected. --- include/wx/object.h | 7 +++++-- tests/misc/misctests.cpp | 12 ++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/include/wx/object.h b/include/wx/object.h index 4ec2bc457f..adc0c03ab1 100644 --- a/include/wx/object.h +++ b/include/wx/object.h @@ -436,6 +436,11 @@ public: // check if this object references the same data as the other one bool IsSameAs(const wxObject& o) const { return m_refData == o.m_refData; } + // RTTI information, usually declared by wxDECLARE_DYNAMIC_CLASS() or + // similar, but done manually for the hierarchy root. Note that it's public + // for compatibility reasons, but shouldn't be accessed directly. + static wxClassInfo ms_classInfo; + protected: // ensure that our data is not shared with anybody else: if we have no // data, it is created using CreateRefData() below, if we have shared data @@ -452,8 +457,6 @@ protected: virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const; wxObjectRefData *m_refData; - - static wxClassInfo ms_classInfo; }; inline wxObject *wxCheckDynamicCast(wxObject *obj, wxClassInfo *classInfo) diff --git a/tests/misc/misctests.cpp b/tests/misc/misctests.cpp index c9edba216d..328c502f31 100644 --- a/tests/misc/misctests.cpp +++ b/tests/misc/misctests.cpp @@ -149,6 +149,18 @@ void MiscTestCase::StaticCast() #endif // wxUSE_TARSTREAM } +TEST_CASE("RTTI::ClassInfo", "[rtti]") +{ + wxObject obj; + CHECK( obj.GetClassInfo()->IsKindOf(wxCLASSINFO(wxObject)) ); + CHECK( !obj.GetClassInfo()->IsKindOf(wxCLASSINFO(wxArchiveEntry)) ); + +#if wxUSE_ZIPSTREAM + wxZipEntry zipEntry; + CHECK( zipEntry.GetClassInfo()->IsKindOf(wxCLASSINFO(wxArchiveEntry)) ); +#endif // wxUSE_ZIPSTREAM +} + TEST_CASE("wxCTZ", "[math]") { CHECK( wxCTZ(1) == 0 );