Fix using WX_DECLARE_OBJARRAY() with pointer types
While this doesn't make, and never made, any sense (pointers should be
stored in a plain, non-object array), we still should continue to
support it for compatibility.
Fix the problem introduced by 97684a9267
by writing "T const&" instead of "const T&" as the latter didn't have
the same meaning when the macro parameter "T" expanded into "U*" as
"const" applied to "U", making this type incompatible with the actual
one.
Also extend the unit test to check for this.
This commit is contained in:
parent
b227875f98
commit
02ffdd16f6
@ -652,7 +652,7 @@ private:
|
||||
classdecl wxObjectArrayTraitsFor##name \
|
||||
{ \
|
||||
public: \
|
||||
static T* Clone(const T& item); \
|
||||
static T* Clone(T const& item); \
|
||||
static void Free(T* p); \
|
||||
}; \
|
||||
typedef wxBaseObjectArray<T, wxObjectArrayTraitsFor##name> \
|
||||
|
@ -95,6 +95,17 @@ WX_DECLARE_OBJARRAY(Bar, ArrayBars);
|
||||
#include "wx/arrimpl.cpp"
|
||||
WX_DEFINE_OBJARRAY(ArrayBars)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// another object array test
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// This code doesn't make any sense, as object arrays should be used with
|
||||
// objects, not pointers, but it used to work, so check that it continues to
|
||||
// compile.
|
||||
WX_DECLARE_OBJARRAY(Bar*, ArrayBarPtrs);
|
||||
#include "wx/arrimpl.cpp"
|
||||
WX_DEFINE_OBJARRAY(ArrayBarPtrs)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// helpers for sorting arrays and comparing items
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -165,6 +176,7 @@ private:
|
||||
CPPUNIT_TEST( wxStringArraySplitJoinTest );
|
||||
|
||||
CPPUNIT_TEST( wxObjArrayTest );
|
||||
CPPUNIT_TEST( wxObjArrayPtrTest );
|
||||
CPPUNIT_TEST( wxArrayUShortTest );
|
||||
CPPUNIT_TEST( wxArrayIntTest );
|
||||
CPPUNIT_TEST( wxArrayCharTest );
|
||||
@ -181,6 +193,7 @@ private:
|
||||
void wxStringArrayJoinTest();
|
||||
void wxStringArraySplitJoinTest();
|
||||
void wxObjArrayTest();
|
||||
void wxObjArrayPtrTest();
|
||||
void wxArrayUShortTest();
|
||||
void wxArrayIntTest();
|
||||
void wxArrayCharTest();
|
||||
@ -567,6 +580,13 @@ void ArraysTestCase::wxObjArrayTest()
|
||||
CPPUNIT_ASSERT_EQUAL( 0, Bar::GetNumber() );
|
||||
}
|
||||
|
||||
void ArraysTestCase::wxObjArrayPtrTest()
|
||||
{
|
||||
// Just check that instantiating this class compiles.
|
||||
ArrayBarPtrs barptrs;
|
||||
CPPUNIT_ASSERT_EQUAL( 0, barptrs.size() );
|
||||
}
|
||||
|
||||
#define TestArrayOf(name) \
|
||||
\
|
||||
void ArraysTestCase::wxArray ## name ## Test() \
|
||||
|
Loading…
Reference in New Issue
Block a user