wxChar& Last()
{ wxASSERT( !IsEmpty() ); CopyBeforeWrite(); return m_pchData[Len()-1]; }
+ /*
+ So why do we have all these overloaded operator[]s? A bit of history:
+ initially there was only one of them, taking size_t. Then people
+ started complaining because they wanted to use ints as indices (I
+ wonder why) and compilers were giving warnings about it, so we had to
+ add the operator[](int). Then it became apparent that you couldn't
+ write str[0] any longer because there was ambiguity between two
+ overloads and so you now had to write str[0u] (or, of course, use the
+ explicit casts to either int or size_t but nobody did this).
+
+ Finally, someone decided to compile wxWin on an Alpha machine and got
+ a surprize: str[0u] didn't compile there because it is of type
+ unsigned int and size_t is unsigned _long_ on Alpha and so there was
+ ambiguity between converting uint to int or ulong. To fix this one we
+ now add operator[](uint) for the machines where size_t is not already
+ the same as unsigned int - hopefully this fixes the problem (for some
+ time)
+
+ The only real fix is, of course, to remove all versions but the one
+ taking size_t...
+ */
+
// operator version of GetChar
wxChar operator[](size_t n) const
{ ASSERT_VALID_INDEX( n ); return m_pchData[n]; }
// operator version of GetChar
wxChar operator[](int n) const
{ ASSERT_VALID_INDEX( n ); return m_pchData[n]; }
-#ifdef __alpha__
- // operator version of GetChar
- wxChar operator[](unsigned int n) const
- { ASSERT_VALID_INDEX( n ); return m_pchData[n]; }
-#endif
// operator version of GetWriteableChar
wxChar& operator[](size_t n)
{ ASSERT_VALID_INDEX( n ); CopyBeforeWrite(); return m_pchData[n]; }
-#ifdef __alpha__
+
+#ifndef wxSIZE_T_IS_UINT
+ // operator version of GetChar
+ wxChar operator[](unsigned int n) const
+ { ASSERT_VALID_INDEX( n ); return m_pchData[n]; }
+
// operator version of GetWriteableChar
- wxChar& operator[](unsigned int n)
+ wxChar& operator[](unsigned int n)
{ ASSERT_VALID_INDEX( n ); CopyBeforeWrite(); return m_pchData[n]; }
-#endif
+#endif // size_t != unsigned int
// implicit conversion to C string
operator const wxChar*() const { return m_pchData; }
#include "wx/ioswrap.h"
-WXDLLEXPORT istream& operator>>(istream&, wxString&);
-WXDLLEXPORT ostream& operator<<(ostream&, const wxString&);
+WXDLLEXPORT wxSTD istream& operator>>(wxSTD istream&, wxString&);
+WXDLLEXPORT wxSTD ostream& operator<<(wxSTD ostream&, const wxString&);
#endif // wxSTD_STRING_COMPATIBILITY