// allocates memory needed to store a C string of length nLen
 void wxString::AllocBuffer(size_t nLen)
 {
-  wxASSERT( nLen >  0         );    //
-  wxASSERT( nLen <= INT_MAX-1 );    // max size (enough room for 1 extra)
+  // allocating 0 sized buffer doesn't make sense, all empty strings should
+  // reuse g_strEmpty
+  wxASSERT( nLen >  0 );
+
+  // make sure that we don't overflow
+  wxASSERT( nLen < (INT_MAX / sizeof(wxChar)) -
+                   (sizeof(wxStringData) + EXTRA_ALLOC + 1) );
 
   STATISTICS_ADD(Length, nLen);
 
     return !*end && (end != start);
 }
 
-// ---------------------------------------------------------------------------
-// stream-like operators
-// ---------------------------------------------------------------------------
-wxString& wxString::operator<<(int i)
-{
-    wxString res;
-    res.Printf(wxT("%d"), i);
-
-    return (*this) << res;
-}
-
-wxString& wxString::operator<<(float f)
-{
-    wxString res;
-    res.Printf(wxT("%f"), f);
-
-    return (*this) << res;
-}
-
-wxString& wxString::operator<<(double d)
-{
-    wxString res;
-    res.Printf(wxT("%g"), d);
-
-    return (*this) << res;
-}
-
 // ---------------------------------------------------------------------------
 // formatted output
 // ---------------------------------------------------------------------------