]> git.saurik.com Git - wxWidgets.git/commitdiff
compilation fix for wxStrtod and friends: non-zero int can't be passed as pointer
authorVáclav Slavík <vslavik@fastmail.fm>
Mon, 16 Jul 2007 18:52:53 +0000 (18:52 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Mon, 16 Jul 2007 18:52:53 +0000 (18:52 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47504 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/wxcrt.h

index 99c01b94ea96472607cf6e7e3e913bb0f2dfae3b..f64ca4c51f91be99bfc7d5c91e65a9712418b91d 100644 (file)
@@ -771,11 +771,24 @@ inline double wxStrtod(const wxCharTypeBuffer<T>& nptr, T **endptr)
 // to be ever used, but it still has to compile).
 template<typename T> struct wxStrtoxCharType {};
 template<> struct wxStrtoxCharType<char**>
-    { typedef const char* Type; };
+{
+    typedef const char* Type;
+    static char** AsPointer(char **p) { return p; }
+};
 template<> struct wxStrtoxCharType<wchar_t**>
-    { typedef const wchar_t* Type; };
+{
+    typedef const wchar_t* Type;
+    static wchar_t** AsPointer(wchar_t **p) { return p; }
+};
 template<> struct wxStrtoxCharType<int>
-    { typedef const char* Type; /* this one is never used */ };
+{
+    typedef const char* Type; /* this one is never used */
+    static char** AsPointer(int WXUNUSED_UNLESS_DEBUG(p))
+    {
+        wxASSERT_MSG( p == 0, "passing non-NULL int is invalid" );
+        return NULL;
+    }
+};
 
 template<typename T>
 inline double wxStrtod(const wxString& nptr, T endptr)
@@ -792,7 +805,8 @@ inline double wxStrtod(const wxString& nptr, T endptr)
         // note that it is important to use c_str() here and not mb_str() or
         // wc_str(), because we store the pointer into (possibly converted)
         // buffer in endptr and so it must be valid even when wxStrtod() returns
-        return wxStrtod((typename wxStrtoxCharType<T>::Type)nptr.c_str(), endptr);
+        return wxStrtod((typename wxStrtoxCharType<T>::Type)nptr.c_str(),
+                        wxStrtoxCharType<T>::AsPointer(endptr));
     }
 }
 template<typename T>
@@ -816,7 +830,8 @@ inline double wxStrtod(const wxCStrData& nptr, T endptr)
             return name(nptr.wx_str(), (wxStringCharType**)NULL, base);       \
         else                                                                  \
             return name((typename wxStrtoxCharType<T>::Type)nptr.c_str(),     \
-                        endptr, base);                                        \
+                        wxStrtoxCharType<T>::AsPointer(endptr),               \
+                        base);                                                \
     }                                                                         \
     template<typename T>                                                      \
     inline rettype name(const wxCStrData& nptr, T endptr, int base)           \