From d390bee8a2135dd9cb64130e959840268539fe45 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 21 Jul 2018 14:03:47 +0200 Subject: [PATCH] Allow comparing wxString with wide strings in non-Unicode build This fixes a compilation error in wxMSW private fonts support implementation, which compares wxString with a wide string but, unlike a local fix there, makes sense more broadly and should reduce the likelihood of similar errors in the future. It also makes comparisons with narrow C strings more efficient in the default, Unicode, build by using wxString::Cmp() method instead of creating a temporary wxString, as was done before. See #18172. --- include/wx/string.h | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/include/wx/string.h b/include/wx/string.h index c05eeac92e..68651f35e3 100644 --- a/include/wx/string.h +++ b/include/wx/string.h @@ -3839,9 +3839,11 @@ public: // wxString comparison functions: operator versions are always case sensitive // --------------------------------------------------------------------------- +// comparison with C-style narrow and wide strings. #define wxCMP_WXCHAR_STRING(p, s, op) 0 op s.Cmp(p) -wxDEFINE_ALL_COMPARISONS(const wxChar *, const wxString&, wxCMP_WXCHAR_STRING) +wxDEFINE_ALL_COMPARISONS(const wchar_t *, const wxString&, wxCMP_WXCHAR_STRING) +wxDEFINE_ALL_COMPARISONS(const char *, const wxString&, wxCMP_WXCHAR_STRING) #undef wxCMP_WXCHAR_STRING @@ -3930,17 +3932,6 @@ inline bool wxString::iterator::operator<=(const const_iterator& i) const inline bool wxString::iterator::operator>=(const const_iterator& i) const { return i <= *this; } -// comparison with C string in Unicode build -#if wxUSE_UNICODE - -#define wxCMP_CHAR_STRING(p, s, op) wxString(p) op s - -wxDEFINE_ALL_COMPARISONS(const char *, const wxString&, wxCMP_CHAR_STRING) - -#undef wxCMP_CHAR_STRING - -#endif // wxUSE_UNICODE - // we also need to provide the operators for comparison with wxCStrData to // resolve ambiguity between operator(const wxChar *,const wxString &) and // operator(const wxChar *, const wxChar *) for "p == s.c_str()"