// deal with STL/non-STL/non-STL-but-wxUSE_STD_STRING
// ----------------------------------------------------------------------------
-#define wxUSE_STL_BASED_WXSTRING wxUSE_STL
+// using STL implies using std::string
+#if wxUSE_STL
+ #undef wxUSE_STD_STRING
+ #define wxUSE_STD_STRING 1
+#endif
+
+// we use STL-based string internally if we use std::string at all now, there
+// should be no reason to prefer our internal implement but if you really need
+// it you can predefine wxUSE_STL_BASED_WXSTRING as 0 when building the library
+#ifndef wxUSE_STL_BASED_WXSTRING
+ #define wxUSE_STL_BASED_WXSTRING wxUSE_STD_STRING
+#endif
// in both cases we need to define wxStdString
#if wxUSE_STL_BASED_WXSTRING || wxUSE_STD_STRING
#undef wxUSE_STD_STRING
#define wxUSE_STD_STRING 1
+ // the versions of std::string included with gcc 2.95 and VC6 (for which
+ // _MSC_VER == 1200) and eVC4 (_MSC_VER == 1201) lack clear() method
#if (defined(__GNUG__) && (__GNUG__ < 3)) || \
- (defined(_MSC_VER) && (_MSC_VER <= 1200))
+ !wxCHECK_VISUALC_VERSION(7) || defined(__EVC4__)
#define wxSTRING_BASE_HASNT_CLEAR
#endif
// lib.string.access
// return the character at position n
+ value_type operator[](size_type n) const { return m_pchData[n]; }
value_type at(size_type n) const
{ wxASSERT_VALID_INDEX( n ); return m_pchData[n]; }
// returns the writable character at position n
+ reference operator[](size_type n) { CopyBeforeWrite(); return m_pchData[n]; }
reference at(size_type n)
{
wxASSERT_VALID_INDEX( n );