/* 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
// 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,5))
+#if !(defined(__VISUALC__) || wxCHECK_GCC_VERSION(3,5)) || defined(__clang__)
+ #define wxNEEDS_DECL_BEFORE_TEMPLATE
+#endif
+
+#ifdef wxNEEDS_DECL_BEFORE_TEMPLATE
template<typename T>
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<typename T>
inline int wxStrcoll_String(const wxString& s1, const T& s2)
#endif
}
-#if defined(__VISUALC__) || wxCHECK_GCC_VERSION(3,5)
-// 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
inline rettype name(const wchar_t *nptr, wchar_t **endptr, int base) \
{ return implW(nptr, endptr, base); } \
template<typename T> \
- inline rettype name(const wxScopedCharTypeBuffer<T>& nptr, T **endptr, int base)\
+ inline rettype name(const wxScopedCharTypeBuffer<T>& nptr, T **endptr, int)\
{ return name(nptr.data(), endptr); } \
template<typename T> \
inline rettype name(const wxString& nptr, T endptr, int base) \