X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7a0079d5a4d1fe6e80cc978d84648fa7bf6fde4a..c564ca3c975aba89f8b911ace0f240c0aaf4cf73:/include/wx/wxcrt.h diff --git a/include/wx/wxcrt.h b/include/wx/wxcrt.h index 9eccfe4cb0..2dc22cd2a2 100644 --- a/include/wx/wxcrt.h +++ b/include/wx/wxcrt.h @@ -39,26 +39,16 @@ inline bool wxIsEmpty(const wxCStrData& s) { return s.AsString().empty(); } /* multibyte to wide char conversion functions and macros */ -#if wxUSE_WCHAR_T - /* multibyte<->widechar conversion */ - WXDLLIMPEXP_BASE size_t wxMB2WC(wchar_t *buf, const char *psz, size_t n); - WXDLLIMPEXP_BASE size_t wxWC2MB(char *buf, const wchar_t *psz, size_t n); - - #if wxUSE_UNICODE - #define wxMB2WX wxMB2WC - #define wxWX2MB wxWC2MB - #define wxWC2WX wxStrncpy - #define wxWX2WC wxStrncpy - #else - #define wxMB2WX wxStrncpy - #define wxWX2MB wxStrncpy - #define wxWC2WX wxWC2MB - #define wxWX2WC wxMB2WC - #endif -#else /* !wxUSE_UNICODE */ - /* No wxUSE_WCHAR_T: we have to do something (JACS) */ - #define wxMB2WC wxStrncpy - #define wxWC2MB wxStrncpy +/* multibyte<->widechar conversion */ +WXDLLIMPEXP_BASE size_t wxMB2WC(wchar_t *buf, const char *psz, size_t n); +WXDLLIMPEXP_BASE size_t wxWC2MB(char *buf, const wchar_t *psz, size_t n); + +#if wxUSE_UNICODE + #define wxMB2WX wxMB2WC + #define wxWX2MB wxWC2MB + #define wxWC2WX wxStrncpy + #define wxWX2WC wxStrncpy +#else #define wxMB2WX wxStrncpy #define wxWX2MB wxStrncpy #define wxWC2WX wxWC2MB @@ -471,17 +461,21 @@ WX_STRCMP_FUNC(wxStricmp, wxCRT_StricmpA, wxCRT_StricmpW, wxStricmp_String) #if defined(wxCRT_StrcollA) && defined(wxCRT_StrcollW) -// GCC 3.3 and other compilers have a bug that causes it to fail compilation if +// GCC 3.4 and other compilers have a bug that causes it to fail compilation if // the template's implementation uses overloaded function declared later (see // the wxStrcoll() call in wxStrcoll_String()), so we have to // forward-declare the template and implement it below WX_STRCMP_FUNC. OTOH, // this fails to compile with VC6, so don't do it for VC. It also causes // problems with GCC visibility in newer GCC versions. -#if !(defined(__VISUALC__) || wxCHECK_GCC_VERSION(3,4)) +#if !(defined(__VISUALC__) || (wxCHECK_GCC_VERSION(3,5) && !wxCHECK_GCC_VERSION(4,7))) || defined(__clang__) + #define wxNEEDS_DECL_BEFORE_TEMPLATE +#endif + +#ifdef wxNEEDS_DECL_BEFORE_TEMPLATE template inline int wxStrcoll_String(const wxString& s1, const T& s2); WX_STRCMP_FUNC(wxStrcoll, wxCRT_StrcollA, wxCRT_StrcollW, wxStrcoll_String) -#endif // !__VISUALC__ +#endif // wxNEEDS_DECL_BEFORE_TEMPLATE template inline int wxStrcoll_String(const wxString& s1, const T& s2) @@ -497,8 +491,9 @@ inline int wxStrcoll_String(const wxString& s1, const T& s2) #endif } -#if defined(__VISUALC__) || wxCHECK_GCC_VERSION(3,4) -// this is exactly the same WX_STRCMP_FUNC line as above wxStrcoll_String<> +#ifndef wxNEEDS_DECL_BEFORE_TEMPLATE +// this is exactly the same WX_STRCMP_FUNC line as above, insde the +// wxNEEDS_DECL_BEFORE_TEMPLATE case WX_STRCMP_FUNC(wxStrcoll, wxCRT_StrcollA, wxCRT_StrcollW, wxStrcoll_String) #endif @@ -884,7 +879,7 @@ inline double wxStrtod(const wxCStrData& nptr, T endptr) inline rettype name(const wchar_t *nptr, wchar_t **endptr, int base) \ { return implW(nptr, endptr, base); } \ template \ - inline rettype name(const wxScopedCharTypeBuffer& nptr, T **endptr, int base)\ + inline rettype name(const wxScopedCharTypeBuffer& nptr, T **endptr, int)\ { return name(nptr.data(), endptr); } \ template \ inline rettype name(const wxString& nptr, T endptr, int base) \