// ----------------------------------------------------------------------------
// in both cases we need to define wxStdString
-#if wxUSE_STL || defined(wxUSE_STD_STRING)
+#if wxUSE_STL || wxUSE_STD_STRING
#include "wx/beforestd.h"
#include <string>
// we don't need an extra ctor from std::string when copy ctor already does
// the work
#undef wxUSE_STD_STRING
+ #define wxUSE_STD_STRING 0
#if (defined(__GNUG__) && (__GNUG__ < 3)) || \
(defined(_MSC_VER) && (_MSC_VER <= 1200))
typedef wxStdString wxStringBase;
#else // if !wxUSE_STL
-#ifndef HAVE_STD_STRING_COMPARE
+#if !defined(HAVE_STD_STRING_COMPARE) && \
+ (!defined(__WX_SETUP_H__) || wxUSE_STL == 0)
#define HAVE_STD_STRING_COMPARE
#endif
// unconditionally add this ctor as it would make wx lib dependent on
// libstdc++ on some Linux versions which is bad, so instead we ask the
// client code to define this wxUSE_STD_STRING symbol if they need it
-#ifdef wxUSE_STD_STRING
+#if wxUSE_STD_STRING
wxString(const wxStdString& s)
: wxStringBase(s.c_str()) { }
#endif // wxUSE_STD_STRING
// from a character
wxString& operator=(wxChar ch)
{ return (wxString&)wxStringBase::operator=(ch); }
- // from a C string
+ // from a C string - STL probably will crash on NULL,
+ // so we need to compensate in that case
+#if wxUSE_STL
+ wxString& operator=(const wxChar *psz)
+ { if(psz) wxStringBase::operator=(psz); else Clear(); return *this; }
+#else
wxString& operator=(const wxChar *psz)
{ return (wxString&)wxStringBase::operator=(psz); }
+#endif
+
#if wxUSE_UNICODE
// from wxWCharBuffer
wxString& operator=(const wxWCharBuffer& psz)
{ return (wxString&)wxStringBase::assign(first, last); }
// string comparison
-#ifndef HAVE_STD_STRING_COMPARE
+#if !defined(HAVE_STD_STRING_COMPARE)
int compare(const wxStringBase& str) const;
// comparison with a substring
int compare(size_t nStart, size_t nLen, const wxStringBase& str) const;
{ return (wxString&)wxStringBase::operator+=(ch); }
};
+// IBM xlC compiler needs these operators to be declared in global scope,
+// although this shouldn't be a problem for the other compilers we prefer to
+// only do it for it in stable 2.6 branch
+#ifdef __IBMCPP__
+wxString WXDLLIMPEXP_BASE operator+(const wxString& string1, const wxString& string2);
+wxString WXDLLIMPEXP_BASE operator+(const wxString& string, wxChar ch);
+wxString WXDLLIMPEXP_BASE operator+(wxChar ch, const wxString& string);
+wxString WXDLLIMPEXP_BASE operator+(const wxString& string, const wxChar *psz);
+wxString WXDLLIMPEXP_BASE operator+(const wxChar *psz, const wxString& string);
+#endif // __IBMCPP__
+
// define wxArrayString, for compatibility
#if WXWIN_COMPATIBILITY_2_4 && !wxUSE_STL
#include "wx/arrstr.h"
{ return (s2.Cmp((const char *)s1) != 0); }
#endif // wxUSE_UNICODE/!wxUSE_UNICODE
-wxString WXDLLIMPEXP_BASE operator+(const wxString& string1, const wxString& string2);
-wxString WXDLLIMPEXP_BASE operator+(const wxString& string, wxChar ch);
-wxString WXDLLIMPEXP_BASE operator+(wxChar ch, const wxString& string);
-wxString WXDLLIMPEXP_BASE operator+(const wxString& string, const wxChar *psz);
-wxString WXDLLIMPEXP_BASE operator+(const wxChar *psz, const wxString& string);
-
#if wxUSE_UNICODE
inline wxString operator+(const wxString& string, const wxWCharBuffer& buf)
{ return string + (const wchar_t *)buf; }