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:
@@ -652,7 +652,7 @@ private:
|
|||||||
classdecl wxObjectArrayTraitsFor##name \
|
classdecl wxObjectArrayTraitsFor##name \
|
||||||
{ \
|
{ \
|
||||||
public: \
|
public: \
|
||||||
static T* Clone(const T& item); \
|
static T* Clone(T const& item); \
|
||||||
static void Free(T* p); \
|
static void Free(T* p); \
|
||||||
}; \
|
}; \
|
||||||
typedef wxBaseObjectArray<T, wxObjectArrayTraitsFor##name> \
|
typedef wxBaseObjectArray<T, wxObjectArrayTraitsFor##name> \
|
||||||
|
@@ -95,6 +95,17 @@ WX_DECLARE_OBJARRAY(Bar, ArrayBars);
|
|||||||
#include "wx/arrimpl.cpp"
|
#include "wx/arrimpl.cpp"
|
||||||
WX_DEFINE_OBJARRAY(ArrayBars)
|
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
|
// helpers for sorting arrays and comparing items
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -165,6 +176,7 @@ private:
|
|||||||
CPPUNIT_TEST( wxStringArraySplitJoinTest );
|
CPPUNIT_TEST( wxStringArraySplitJoinTest );
|
||||||
|
|
||||||
CPPUNIT_TEST( wxObjArrayTest );
|
CPPUNIT_TEST( wxObjArrayTest );
|
||||||
|
CPPUNIT_TEST( wxObjArrayPtrTest );
|
||||||
CPPUNIT_TEST( wxArrayUShortTest );
|
CPPUNIT_TEST( wxArrayUShortTest );
|
||||||
CPPUNIT_TEST( wxArrayIntTest );
|
CPPUNIT_TEST( wxArrayIntTest );
|
||||||
CPPUNIT_TEST( wxArrayCharTest );
|
CPPUNIT_TEST( wxArrayCharTest );
|
||||||
@@ -181,6 +193,7 @@ private:
|
|||||||
void wxStringArrayJoinTest();
|
void wxStringArrayJoinTest();
|
||||||
void wxStringArraySplitJoinTest();
|
void wxStringArraySplitJoinTest();
|
||||||
void wxObjArrayTest();
|
void wxObjArrayTest();
|
||||||
|
void wxObjArrayPtrTest();
|
||||||
void wxArrayUShortTest();
|
void wxArrayUShortTest();
|
||||||
void wxArrayIntTest();
|
void wxArrayIntTest();
|
||||||
void wxArrayCharTest();
|
void wxArrayCharTest();
|
||||||
@@ -567,6 +580,13 @@ void ArraysTestCase::wxObjArrayTest()
|
|||||||
CPPUNIT_ASSERT_EQUAL( 0, Bar::GetNumber() );
|
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) \
|
#define TestArrayOf(name) \
|
||||||
\
|
\
|
||||||
void ArraysTestCase::wxArray ## name ## Test() \
|
void ArraysTestCase::wxArray ## name ## Test() \
|
||||||
|
Reference in New Issue
Block a user