]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wxUSE_STD_CONTAINERS and turn it on by default.
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 30 Mar 2011 14:16:04 +0000 (14:16 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 30 Mar 2011 14:16:04 +0000 (14:16 +0000)
Previously, wxUSE_STL enabled both implicit conversion of wxString to
std::[w]string and use of standard containers for the implementation of their
wx equivalents. Split up the two roles now by allowing to enable the use of
the standard containers independently of (backwards incompatible) implicit
conversion in wxString and actually enable wxUSE_STD_CONTAINERS by default.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67343 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

39 files changed:
configure
configure.in
docs/changes.txt
include/wx/arrstr.h
include/wx/build.h
include/wx/chkconf.h
include/wx/defs.h
include/wx/dlist.h
include/wx/dynarray.h
include/wx/gdicmn.h
include/wx/hash.h
include/wx/hashmap.h
include/wx/hashset.h
include/wx/list.h
include/wx/listimpl.cpp
include/wx/meta/movable.h
include/wx/motif/setup0.h
include/wx/msw/setup0.h
include/wx/msw/wince/setup.h
include/wx/os2/setup0.h
include/wx/osx/setup0.h
include/wx/palmos/setup0.h
include/wx/setup_inc.h
include/wx/stack.h
include/wx/string.h
include/wx/stringimpl.h
include/wx/univ/setup0.h
include/wx/vector.h
setup.h.in
src/common/arrstr.cpp
src/common/cmdproc.cpp
src/common/dcbase.cpp
src/common/dcgraph.cpp
src/common/dynarray.cpp
src/common/list.cpp
src/common/wincmn.cpp
src/msw/dc.cpp
src/osx/choice_osx.cpp
src/stc/PlatWX.cpp

index 72979f91e0e94de1ea29281b25d52e38d6fee045..220cf42313d37861ea870572429e80d69c274830 100755 (executable)
--- a/configure
+++ b/configure
@@ -1494,7 +1494,7 @@ do
    { (exit 1); exit 1; }; }
 done
 
-# There might be people who depend on the old broken behaviour: `$host'
+# There might be people who depend on the old broken behavior: `$host'
 # used to hold the argument of --host etc.
 # FIXME: To remove some day.
 build=$build_alias
@@ -1689,9 +1689,11 @@ Optional Features:
   --enable-debug_cntxt    obsolete, don't use: use wxDebugContext
   --enable-mem_tracing    obsolete, don't use: create code with memory tracing
   --disable-shared        create static library instead of shared
-  --enable-stl            use STL for containers
+  --enable-stl            use standard C++ classes for everything
+  --enable-std_containers use standard C++ container classes
   --enable-std_iostreams  use standard C++ stream classes
   --enable-std_string     use standard C++ string classes
+ --enable-std_string_conv_in_wxstring     provide implicit conversion to std::string in wxString
   --disable-unicode       compile without Unicode support
   --enable-mslu           use MS Layer for Unicode on Windows 9x (Win32 only)
   --enable-utf8           use UTF-8 representation for strings (Unix only)
@@ -2971,6 +2973,7 @@ esac
 
 DEFAULT_wxUSE_ALL_FEATURES=yes
 
+DEFAULT_wxUSE_STD_CONTAINERS=$DEFAULT_STD_FLAG
 DEFAULT_wxUSE_STD_IOSTREAM=$DEFAULT_STD_FLAG
 DEFAULT_wxUSE_STD_STRING=$DEFAULT_STD_FLAG
 
@@ -4775,6 +4778,50 @@ fi
 echo "${ECHO_T}$result" >&6; }
 
 
+          enablestring=
+          defaultval=
+          if test -z "$defaultval"; then
+              if test x"$enablestring" = xdisable; then
+                  defaultval=yes
+              else
+                  defaultval=no
+              fi
+          fi
+
+          { echo "$as_me:$LINENO: checking for --${enablestring:-enable}-std_containers" >&5
+echo $ECHO_N "checking for --${enablestring:-enable}-std_containers... $ECHO_C" >&6; }
+          # Check whether --enable-std_containers was given.
+if test "${enable_std_containers+set}" = set; then
+  enableval=$enable_std_containers;
+                          if test "$enableval" = yes; then
+                            wx_cv_use_std_containers='wxUSE_STD_CONTAINERS=yes'
+                          else
+                            wx_cv_use_std_containers='wxUSE_STD_CONTAINERS=no'
+                          fi
+
+else
+
+                          wx_cv_use_std_containers='wxUSE_STD_CONTAINERS=${'DEFAULT_wxUSE_STD_CONTAINERS":-$defaultval}"
+
+fi
+
+
+          eval "$wx_cv_use_std_containers"
+
+          if test x"$enablestring" = xdisable; then
+            if test $wxUSE_STD_CONTAINERS = no; then
+              result=yes
+            else
+              result=no
+            fi
+          else
+            result=$wxUSE_STD_CONTAINERS
+          fi
+
+          { echo "$as_me:$LINENO: result: $result" >&5
+echo "${ECHO_T}$result" >&6; }
+
+
           enablestring=
           defaultval=
           if test -z "$defaultval"; then
@@ -4863,6 +4910,50 @@ fi
 echo "${ECHO_T}$result" >&6; }
 
 
+          enablestring=
+          defaultval=
+          if test -z "$defaultval"; then
+              if test x"$enablestring" = xdisable; then
+                  defaultval=yes
+              else
+                  defaultval=no
+              fi
+          fi
+
+          { echo "$as_me:$LINENO: checking for --${enablestring:-enable}-std_string_conv_in_wxstring" >&5
+echo $ECHO_N "checking for --${enablestring:-enable}-std_string_conv_in_wxstring... $ECHO_C" >&6; }
+          # Check whether --enable-std_string_conv_in_wxstring was given.
+if test "${enable_std_string_conv_in_wxstring+set}" = set; then
+  enableval=$enable_std_string_conv_in_wxstring;
+                          if test "$enableval" = yes; then
+                            wx_cv_use_std_string_conv_in_wxstring='wxUSE_STD_STRING_CONV_IN_WXSTRING=yes'
+                          else
+                            wx_cv_use_std_string_conv_in_wxstring='wxUSE_STD_STRING_CONV_IN_WXSTRING=no'
+                          fi
+
+else
+
+                          wx_cv_use_std_string_conv_in_wxstring='wxUSE_STD_STRING_CONV_IN_WXSTRING=${'DEFAULT_wxUSE_STD_STRING_CONV_IN_WXSTRING":-$defaultval}"
+
+fi
+
+
+          eval "$wx_cv_use_std_string_conv_in_wxstring"
+
+          if test x"$enablestring" = xdisable; then
+            if test $wxUSE_STD_STRING_CONV_IN_WXSTRING = no; then
+              result=yes
+            else
+              result=no
+            fi
+          else
+            result=$wxUSE_STD_STRING_CONV_IN_WXSTRING
+          fi
+
+          { echo "$as_me:$LINENO: result: $result" >&5
+echo "${ECHO_T}$result" >&6; }
+
+
           enablestring=disable
           defaultval=
           if test -z "$defaultval"; then
@@ -44881,6 +44972,13 @@ _ACEOF
 
 fi
 
+if test "$wxUSE_STD_CONTAINERS" = "yes"; then
+  cat >>confdefs.h <<\_ACEOF
+#define wxUSE_STD_CONTAINERS 1
+_ACEOF
+
+fi
+
 if test "$wxUSE_STD_IOSTREAM" = "yes"; then
   cat >>confdefs.h <<\_ACEOF
 #define wxUSE_STD_IOSTREAM 1
@@ -44895,6 +44993,13 @@ _ACEOF
 
 fi
 
+if test "$wxUSE_STD_STRING_CONV_IN_WXSTRING" = "yes"; then
+  cat >>confdefs.h <<\_ACEOF
+#define wxUSE_STD_STRING_CONV_IN_WXSTRING 1
+_ACEOF
+
+fi
+
 if test "$wxUSE_STDPATHS" = "yes"; then
   cat >>confdefs.h <<\_ACEOF
 #define wxUSE_STDPATHS 1
index cf52e22b54e4d7c6c8b6b4b3e540460e93ccd6fc..cecced57402d0c2f987b8644bdbab96578a9e9de 100644 (file)
@@ -372,6 +372,7 @@ dnl wxUSE_ALL_FEATURES which is the only which has to be set to "yes" by
 dnl default)
 DEFAULT_wxUSE_ALL_FEATURES=yes
 
+DEFAULT_wxUSE_STD_CONTAINERS=$DEFAULT_STD_FLAG
 DEFAULT_wxUSE_STD_IOSTREAM=$DEFAULT_STD_FLAG
 DEFAULT_wxUSE_STD_STRING=$DEFAULT_STD_FLAG
 
@@ -699,9 +700,11 @@ dnl global compile options
 dnl ---------------------------------------------------------------------------
 
 WX_ARG_DISABLE(shared,     [  --disable-shared        create static library instead of shared], wxUSE_SHARED)
-WX_ARG_ENABLE(stl,         [  --enable-stl            use STL for containers], wxUSE_STL)
+WX_ARG_ENABLE(stl,         [  --enable-stl            use standard C++ classes for everything], wxUSE_STL)
+WX_ARG_ENABLE(std_containers,[  --enable-std_containers use standard C++ container classes], wxUSE_STD_CONTAINERS)
 WX_ARG_ENABLE(std_iostreams, [  --enable-std_iostreams  use standard C++ stream classes], wxUSE_STD_IOSTREAM)
 WX_ARG_ENABLE(std_string,    [  --enable-std_string     use standard C++ string classes], wxUSE_STD_STRING)
+WX_ARG_ENABLE(std_string_conv_in_wxstring, [ --enable-std_string_conv_in_wxstring     provide implicit conversion to std::string in wxString], wxUSE_STD_STRING_CONV_IN_WXSTRING)
 WX_ARG_DISABLE(unicode,      [  --disable-unicode       compile without Unicode support], wxUSE_UNICODE)
 WX_ARG_ENABLE(mslu,          [  --enable-mslu           use MS Layer for Unicode on Windows 9x (Win32 only)], wxUSE_UNICODE_MSLU)
 WX_ARG_ENABLE_PARAM(utf8,    [  --enable-utf8           use UTF-8 representation for strings (Unix only)], wxUSE_UNICODE_UTF8)
@@ -5968,6 +5971,10 @@ if test "$wxUSE_BUSYINFO" = "yes"; then
   AC_DEFINE(wxUSE_BUSYINFO)
 fi
 
+if test "$wxUSE_STD_CONTAINERS" = "yes"; then
+  AC_DEFINE(wxUSE_STD_CONTAINERS)
+fi
+
 if test "$wxUSE_STD_IOSTREAM" = "yes"; then
   AC_DEFINE(wxUSE_STD_IOSTREAM)
 fi
@@ -5976,6 +5983,10 @@ if test "$wxUSE_STD_STRING" = "yes"; then
   AC_DEFINE(wxUSE_STD_STRING)
 fi
 
+if test "$wxUSE_STD_STRING_CONV_IN_WXSTRING" = "yes"; then
+  AC_DEFINE(wxUSE_STD_STRING_CONV_IN_WXSTRING)
+fi
+
 if test "$wxUSE_STDPATHS" = "yes"; then
   AC_DEFINE(wxUSE_STDPATHS)
 fi
index a2da01c5cede96c47d9ff63e4bacdd279aadb441..50377642f3795b6450c700086df1404071f4b49e 100644 (file)
@@ -439,6 +439,8 @@ Major new features in this release
 
 All:
 
+- Use standard implementations of container classes by default, you need to
+  explicitly set wxUSE_STD_CONTAINERS to 0 to use wxWidgets implementations.
 - Added cwd and env arguments to wxExecute() (Emilien Kia).
 - Added "rest" argument to wxString::Before{First,Last}().
 - Added wxThread::OnKill() and OnDelete() callbacks.
index 63b8cf80d0a86633dc67e40b02a8f03afe83dbbc..49f5f21d920e1a17b0aa4dc3d0b1b42e2632f0b3 100644 (file)
@@ -28,7 +28,7 @@ inline int wxCMPFUNC_CONV wxStringSortDescending(wxString* s1, wxString* s2)
     return wxStringSortAscending(s2, s1);
 }
 
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
 
 #include "wx/dynarray.h"
 
@@ -100,7 +100,7 @@ private:
     }
 };
 
-#else // if !wxUSE_STL
+#else // if !wxUSE_STD_CONTAINERS
 
 // this shouldn't be defined for compilers not supporting template methods or
 // without std::distance()
@@ -384,7 +384,7 @@ public:
     { Copy(array); }
 };
 
-#endif // !wxUSE_STL
+#endif // !wxUSE_STD_CONTAINERS
 
 // this class provides a temporary wxString* from a
 // wxArrayString
index 4d5b5421c4f18f320a3030cbb3ceec8f55fc7134..722f0dd031c8e52390eb16bace839102480671f9 100644 (file)
@@ -85,7 +85,7 @@
 #endif
 
 // deriving wxWin containers from STL ones changes them completely:
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
     #define __WX_BO_STL ",STL containers"
 #else
     #define __WX_BO_STL ",wx containers"
index 65f6ce6702033807cc042dcdb594d83ab29a56dd..fa88745fc57d396c82ff235c086df84a2750d932 100644 (file)
 #   endif
 #endif /* !defined(wxUSE_SOCKETS) */
 
+#ifndef wxUSE_STD_CONTAINERS
+#   ifdef wxABORT_ON_CONFIG_ERROR
+#       error "wxUSE_STD_CONTAINERS must be defined, please read comment near the top of this file."
+#   else
+#       define wxUSE_STD_CONTAINERS 0
+#   endif
+#endif /* !defined(wxUSE_STD_CONTAINERS) */
+
+#ifndef wxUSE_STD_STRING_CONV_IN_WXSTRING
+#   ifdef wxABORT_ON_CONFIG_ERROR
+#       error "wxUSE_STD_STRING_CONV_IN_WXSTRING must be defined, please read comment near the top of this file."
+#   else
+#       define wxUSE_STD_STRING_CONV_IN_WXSTRING 0
+#   endif
+#endif /* !defined(wxUSE_STD_STRING_CONV_IN_WXSTRING) */
+
 #ifndef wxUSE_STREAMS
 #   ifdef wxABORT_ON_CONFIG_ERROR
 #       error "wxUSE_STREAMS must be defined, please read comment near the top of this file."
index 6c53b5d71c1f0ee2c725bd9d3eb5b65f514291b0..d13d5a77ed354787cfccb0ab66d60c6911b93add 100644 (file)
        class 'bar'" */
 #   pragma warning(disable:4251)
 
+    /*
+        This is a similar warning which occurs when deriving from standard
+        containers. MSDN even mentions that it can be ignored in this case
+        (albeit only in debug build while the warning is the same in release
+        too and seems equally harmless).
+     */
+#if wxUSE_STD_CONTAINERS
+#   pragma warning(disable:4275)
+#endif /// wxUSE_STD_CONTAINERS
+
 #   ifdef __VISUALC5__
     /* For VC++ 5.0 for release mode, the warning 'C4702: unreachable code */
     /* is buggy, and occurs for code that does actually get executed */
@@ -2760,7 +2770,7 @@ typedef int (* LINKAGEMODE wxListIterateFunction)(void *current);
 #endif
 
 #if defined(__CYGWIN__) && defined(__WXMSW__)
-#   if wxUSE_STL || defined(wxUSE_STD_STRING)
+#   if wxUSE_STD_CONTAINERS || defined(wxUSE_STD_STRING)
          /*
             NASTY HACK because the gethostname in sys/unistd.h which the gnu
             stl includes and wx builds with by default clash with each other
index 164ed8680a64d15bca4836b5aae762dfca48a2c4..b69f617d9bc2075aa28376cdd38f7c2a386a027b 100644 (file)
@@ -13,7 +13,7 @@
 #include "wx/defs.h"
 #include "wx/utils.h"
 
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
 
 #include "wx/beforestd.h"
 #include <algorithm>
@@ -199,7 +199,7 @@ public:
     }
 };
 
-#else  // STL
+#else  // !wxUSE_STD_CONTAINERS
 
 template <typename T>
 class wxDList
@@ -845,6 +845,6 @@ public:
     } */
 };
 
-#endif // wxUSE_STL/!wxUSE_STL
+#endif // wxUSE_STD_CONTAINERS/!wxUSE_STD_CONTAINERS
 
 #endif // _WX_DLIST_H_
index 3c7f88926eb4e9cbd0b04533141000ecc0f99193..1fc89c9939ea1e78a6d11332c368f092b3deeae0 100644 (file)
@@ -14,7 +14,7 @@
 
 #include "wx/defs.h"
 
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
     #include "wx/beforestd.h"
     #include <vector>
     #include <algorithm>
@@ -81,7 +81,7 @@ typedef int (wxCMPFUNC_CONV *CMPFUNC)(const void* pItem1, const void* pItem2);
 //     you cast "SomeArray *" as "BaseArray *" and then delete it)
 // ----------------------------------------------------------------------------
 
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
 
 template<class T>
 class wxArray_SortFunction
@@ -203,12 +203,12 @@ public:                                                             \
   }                                                                 \
 }
 
-#else // if !wxUSE_STL
+#else // if !wxUSE_STD_CONTAINERS
 
 #define  _WX_DECLARE_BASEARRAY(T, name, classexp)                   \
 classexp name                                                       \
 {                                                                   \
-  typedef CMPFUNC SCMPFUNC; /* for compatibility wuth wxUSE_STL */  \
+  typedef CMPFUNC SCMPFUNC; /* for compatibility wuth wxUSE_STD_CONTAINERS */  \
 public:                                                             \
   name();                                                           \
   name(const name& array);                                          \
@@ -307,7 +307,7 @@ private:                                                            \
   T      *m_pItems;                                                 \
 }
 
-#endif // !wxUSE_STL
+#endif // !wxUSE_STD_CONTAINERS
 
 // ============================================================================
 // The private helper macros containing the core of the array classes
@@ -325,7 +325,7 @@ private:                                                            \
 // _WX_DEFINE_TYPEARRAY: array for simple types
 // ----------------------------------------------------------------------------
 
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
 
 // in STL case we don't need the entire base arrays hack as standard container
 // don't suffer from alignment/storage problems as our home-grown do
@@ -335,7 +335,7 @@ private:                                                            \
 #define  _WX_DEFINE_TYPEARRAY_PTR(T, name, base, classexp)         \
          _WX_DEFINE_TYPEARRAY(T, name, base, classexp)
 
-#else // if !wxUSE_STL
+#else // if !wxUSE_STD_CONTAINERS
 
 // common declaration used by both _WX_DEFINE_TYPEARRAY and
 // _WX_DEFINE_TYPEARRAY_PTR
@@ -505,7 +505,7 @@ public:                                                               \
 #define _WX_DEFINE_TYPEARRAY_PTR(T, name, base, classexp)          \
     _WX_DEFINE_TYPEARRAY_HELPER(T, name, base, classexp, _WX_PTROP_NONE)
 
-#endif // !wxUSE_STL
+#endif // !wxUSE_STD_CONTAINERS
 
 // ----------------------------------------------------------------------------
 // _WX_DEFINE_SORTED_TYPEARRAY: sorted array for simple data types
index a41a9c5f52746f90fb3ed2ebb28b10bfbe3cdd25..5b6282d4b2a6abb33e04a60249d4b88bdc645d7c 100644 (file)
@@ -900,7 +900,7 @@ class WXDLLIMPEXP_CORE wxResourceCache: public wxList
 {
 public:
     wxResourceCache() { }
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
     wxResourceCache(const unsigned int keyType) : wxList(keyType) { }
 #endif
     virtual ~wxResourceCache();
index 43e9d957e4f50b758fd1d1d07e639e7e588d94ee..d88d38275b0065b8032c9c21f944dab800723635 100644 (file)
@@ -15,7 +15,7 @@
 #include "wx/defs.h"
 #include "wx/string.h"
 
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
     #include "wx/object.h"
 #else
     class WXDLLIMPEXP_FWD_BASE wxObject;
@@ -80,7 +80,7 @@ protected:
 };
 
 class WXDLLIMPEXP_BASE wxHashTableBase
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
     : public wxObject
 #endif
 {
index c6f9f46941596508e211bbe7fd7814ec65af374d..7d6e56d74c1fc87edd54eb5225bae2b3fb4539b2 100644 (file)
@@ -15,9 +15,9 @@
 #include "wx/string.h"
 #include "wx/wxcrt.h"
 
-// In wxUSE_STL build we prefer to use the standard hash map class but it can
-// be either in non-standard hash_map header (old g++ and some other STL
-// implementations) or in C++0x standard unordered_map which can in turn be
+// In wxUSE_STD_CONTAINERS build we prefer to use the standard hash map class
+// but it can be either in non-standard hash_map header (old g++ and some other
+// STL implementations) or in C++0x standard unordered_map which can in turn be
 // available either in std::tr1 or std namespace itself
 //
 // To summarize: if std::unordered_map is available use it, otherwise use tr1
@@ -28,7 +28,7 @@
     #define HAVE_STL_HASH_MAP
 #endif
 
-#if wxUSE_STL && \
+#if wxUSE_STD_CONTAINERS && \
     (defined(HAVE_STD_UNORDERED_MAP) || defined(HAVE_TR1_UNORDERED_MAP))
 
 #if defined(HAVE_STD_UNORDERED_MAP)
@@ -42,7 +42,7 @@
 #define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \
     typedef WX_HASH_MAP_NAMESPACE::unordered_map< KEY_T, VALUE_T, HASH_T, KEY_EQ_T > CLASSNAME
 
-#elif wxUSE_STL && defined(HAVE_STL_HASH_MAP)
+#elif wxUSE_STD_CONTAINERS && defined(HAVE_STL_HASH_MAP)
 
 #if defined(HAVE_EXT_HASH_MAP)
     #include <ext/hash_map>
@@ -59,7 +59,7 @@
 #define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \
     typedef WX_HASH_MAP_NAMESPACE::hash_map< KEY_T, VALUE_T, HASH_T, KEY_EQ_T > CLASSNAME
 
-#else // !wxUSE_STL || no std::{hash,unordered}_map class available
+#else // !wxUSE_STD_CONTAINERS || no std::{hash,unordered}_map class available
 
 #define wxNEEDS_WX_HASH_MAP
 
index 250f5304314852bdb45eb89227b8b7e5d10af64d..d971d1f411243767a2f2fe86ff88e7b609b4c2dc 100644 (file)
@@ -17,7 +17,7 @@
 // see comment in wx/hashmap.h which also applies to different standard hash
 // set classes
 
-#if wxUSE_STL && \
+#if wxUSE_STD_CONTAINERS && \
     (defined(HAVE_STD_UNORDERED_SET) || defined(HAVE_TR1_UNORDERED_SET))
 
 #if defined(HAVE_STD_UNORDERED_SET)
@@ -30,7 +30,7 @@
     #error Update this code: unordered_set is available, but I do not know where.
 #endif
 
-#elif wxUSE_STL && defined(HAVE_STL_HASH_MAP)
+#elif wxUSE_STD_CONTAINERS && defined(HAVE_STL_HASH_MAP)
 
 #if defined(HAVE_EXT_HASH_MAP)
     #include <ext/hash_set>
index 8f0c86f27618340bf300f52203f2e864a730fa6c..02453b9fdc86bd8a20c4ab997d5b74e47ae708e8 100644 (file)
@@ -33,7 +33,7 @@
 #include "wx/object.h"
 #include "wx/string.h"
 
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
     #include "wx/beforestd.h"
     #include <algorithm>
     #include <iterator>
@@ -48,7 +48,7 @@
 class WXDLLIMPEXP_FWD_BASE wxObjectListNode;
 typedef wxObjectListNode wxNode;
 
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
 
 #define wxLIST_COMPATIBILITY
 
@@ -346,7 +346,7 @@ inline const void *wxListCastElementToVoidPtr(const wxString& str)
 #define WX_DEFINE_EXPORTED_LIST(name)      WX_DEFINE_LIST(name)
 #define WX_DEFINE_USER_EXPORTED_LIST(name) WX_DEFINE_LIST(name)
 
-#else // if !wxUSE_STL
+#else // if !wxUSE_STD_CONTAINERS
 
 
 // undef it to get rid of old, deprecated functions
@@ -1148,7 +1148,7 @@ private:
 #define WX_DEFINE_EXPORTED_LIST(name)      WX_DEFINE_LIST(name)
 #define WX_DEFINE_USER_EXPORTED_LIST(name) WX_DEFINE_LIST(name)
 
-#endif // !wxUSE_STL
+#endif // !wxUSE_STD_CONTAINERS
 
 // ============================================================================
 // now we can define classes 100% compatible with the old ones
@@ -1162,7 +1162,7 @@ private:
 
 // inline compatibility functions
 
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
 
 // ----------------------------------------------------------------------------
 // wxNodeBase deprecated methods
@@ -1197,26 +1197,26 @@ WX_DECLARE_LIST_2(wxObject, wxObjectList, wxObjectListNode,
 class WXDLLIMPEXP_BASE wxList : public wxObjectList
 {
 public:
-#if defined(wxWARN_COMPAT_LIST_USE) && !wxUSE_STL
+#if defined(wxWARN_COMPAT_LIST_USE) && !wxUSE_STD_CONTAINERS
     wxList() { };
     wxDEPRECATED( wxList(int key_type) );
-#elif !wxUSE_STL
+#elif !wxUSE_STD_CONTAINERS
     wxList(int key_type = wxKEY_NONE);
 #endif
 
     // this destructor is required for Darwin
    ~wxList() { }
 
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
     wxList& operator=(const wxList& list)
         { if (&list != this) Assign(list); return *this; }
 
     // compatibility methods
     void Sort(wxSortCompareFunction compfunc) { wxListBase::Sort(compfunc); }
-#endif // !wxUSE_STL
+#endif // !wxUSE_STD_CONTAINERS
 };
 
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
 
 // -----------------------------------------------------------------------------
 // wxStringList class for compatibility with the old code
@@ -1268,7 +1268,7 @@ private:
     void DoCopy(const wxStringList&); // common part of copy ctor and operator=
 };
 
-#else // if wxUSE_STL
+#else // if wxUSE_STD_CONTAINERS
 
 WX_DECLARE_LIST_XO(wxString, wxStringListBase, class WXDLLIMPEXP_BASE);
 
@@ -1291,7 +1291,7 @@ public:
         { push_front(s); return GetFirst(); }
 };
 
-#endif // wxUSE_STL
+#endif // wxUSE_STD_CONTAINERS
 
 #endif // wxLIST_COMPATIBILITY
 
index 405ff6da9bf54b83b75f2bcc148fa01a42a90fb6..fec23d206c1fc447be6e4482b8fc5c6296e96ca3 100644 (file)
@@ -9,7 +9,7 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
 
 #undef  WX_DEFINE_LIST
 #define WX_DEFINE_LIST(name)                                                  \
@@ -19,7 +19,7 @@
     }                                                                         \
     name::BaseListType name::EmptyList;
 
-#else // !wxUSE_STL
+#else // !wxUSE_STD_CONTAINERS
     #undef WX_DEFINE_LIST_2
     #define WX_DEFINE_LIST_2(T, name)     \
         void wx##name##Node::DeleteData() \
@@ -32,5 +32,5 @@
     #undef  WX_DEFINE_LIST
     #define WX_DEFINE_LIST(name) WX_DEFINE_LIST_2(_WX_LIST_ITEM_TYPE_##name, name)
 
-#endif // wxUSE_STL/!wxUSE_STL
+#endif // wxUSE_STD_CONTAINERS/!wxUSE_STD_CONTAINERS
 
index 8c934874724a06f4a2aecc523406ff95529ed164..a962282c423ceee45529b520e685e9e2194d5047 100644 (file)
@@ -38,7 +38,7 @@ struct wxIsMovable
 // (NB: we don't put this into string.h and choose to include wx/string.h from
 // here instead so that rarely-used wxIsMovable<T> code isn't included by
 // everything)
-#if !wxUSE_STL && !wxUSE_STRING_POS_CACHE
+#if !wxUSE_STD_STRING && !wxUSE_STRING_POS_CACHE
 WX_DECLARE_TYPE_MOVABLE(wxString)
 #endif
 
index 720fea7abca95dbb67d1157cd0be14e6d272e7f1..eb5a7f7d3f9b859eb777f79ce366cf2ad9301353 100644 (file)
 // Recommended setting: 0 (this is still work in progress...)
 #define wxUSE_EXTENDED_RTTI 0
 
-// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from
-// std::list<Foo*> and std::vector<Foo*>, with a compatibility interface,
-// and for wxHashMap to be implemented with templates.
-//
-// Default is 0
-//
-// Recommended setting: YMMV
-#define wxUSE_STL 0
-
 // Support for message/error logging. This includes wxLogXXX() functions and
 // wxLog and derived classes. Don't set this to 0 unless you really know what
 // you are doing.
 // Recommended setting: 1 as setting it to 0 disables many other things
 #define wxUSE_STREAMS       1
 
+// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
+// Note that if the system's implementation does not support positional
+// parameters, setting this to 1 forces the use of the wxWidgets implementation
+// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
+// many Unix systems but usually doesn't under Windows.
+//
+// Positional parameters are very useful when translating a program since using
+// them in formatting strings allow translators to correctly reorder the
+// translated sentences.
+//
+// Default is 1
+//
+// Recommended setting: 1 if you want to support multiple languages
+#define wxUSE_PRINTF_POS_PARAMS      1
+
+
+// ----------------------------------------------------------------------------
+// Interoperability with the standard library.
+// ----------------------------------------------------------------------------
+
+// Set wxUSE_STL to 1 to enable maximal interoperability with the standard
+// library, even at the cost of backwards compatibility.
+//
+// Default is 0
+//
+// Recommended setting: 0 as the options below already provide a relatively
+// good level of interoperability and changing this option arguably isn't worth
+// diverging from the official builds of the library.
+#define wxUSE_STL 0
+
 // This is not a real option but is used as the default value for
-// wxUSE_STD_IOSTREAM and wxUSE_STD_STRING.
+// wxUSE_STD_IOSTREAM, wxUSE_STD_STRING and wxUSE_STD_CONTAINERS.
 //
 // Currently the Digital Mars and Watcom compilers come without standard C++
 // library headers by default, wxUSE_STD_STRING can be set to 1 if you do have
     #define wxUSE_STD_DEFAULT  1
 #endif
 
+// Use standard C++ containers to implement wxVector<>, wxStack<>, wxDList<>
+// and wxHashXXX<> classes. If disabled, wxWidgets own (mostly compatible but
+// usually more limited) implementations are used which allows to avoid the
+// dependency on the C++ run-time library.
+//
+// Default is 1 if compiler supports it.
+//
+// Recommended setting: 1 unless you use a system without good implementation
+// of STL.
+#define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
+
 // Use standard C++ streams if 1 instead of wx streams in some places. If
-// disabled (default), wx streams are used everywhere and wxWidgets doesn't
-// depend on the standard streams library.
+// disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
+// standard streams library.
 //
 // Notice that enabling this does not replace wx streams with std streams
 // everywhere, in a lot of places wx streams are used no matter what.
 //
-// Default is 0
+// Default is 1 if compiler supports it.
 //
 // Recommended setting: 1 if you use the standard streams anyhow and so
 //                      dependency on the standard streams library is not a
 //                      problem
 #define wxUSE_STD_IOSTREAM  wxUSE_STD_DEFAULT
 
-// Enable conversion to standard C++ string if 1.
+// Enable minimal interoperability with the standard C++ string class if 1.
+// "Minimal" means that wxString can be constructed from std::string or
+// std::wstring but can't be implicitly converted to them. You need to enable
+// the option below for the latter.
 //
 // Default is 1 for most compilers.
 //
 //                      the standard C++ library at all.
 #define wxUSE_STD_STRING  wxUSE_STD_DEFAULT
 
-// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
-// Note that if the system's implementation does not support positional
-// parameters, setting this to 1 forces the use of the wxWidgets implementation
-// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
-// many Unix systems but usually doesn't under Windows.
+// Make wxString as much interchangeable with std::[w]string as possible, in
+// particular allow implicit conversion of wxString to either of these classes.
+// This comes at a price (or a benefit, depending on your point of view) of not
+// allowing implicit conversion to "const char *" and "const wchar_t *".
 //
-// Positional parameters are very useful when translating a program since using
-// them in formatting strings allow translators to correctly reorder the
-// translated sentences.
+// Because a lot of existing code relies on these conversions, this option is
+// disabled by default but can be enabled for your build if you don't care
+// about compatibility.
 //
-// Default is 1
+// Default is 0 if wxUSE_STL has its default value or 1 if it is enabled.
 //
-// Recommended setting: 1 if you want to support multiple languages
-#define wxUSE_PRINTF_POS_PARAMS      1
+// Recommended setting: 0 to remain compatible with the official builds of
+// wxWidgets.
+#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL
+
 
 // ----------------------------------------------------------------------------
 // non GUI features selection
index 95fb470bd81cf77e9da049b00761cdcec3ebe910..d9ad000bbb7749af3e41f5a619fd7273567fe767 100644 (file)
 // Recommended setting: 0 (this is still work in progress...)
 #define wxUSE_EXTENDED_RTTI 0
 
-// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from
-// std::list<Foo*> and std::vector<Foo*>, with a compatibility interface,
-// and for wxHashMap to be implemented with templates.
-//
-// Default is 0
-//
-// Recommended setting: YMMV
-#define wxUSE_STL 0
-
 // Support for message/error logging. This includes wxLogXXX() functions and
 // wxLog and derived classes. Don't set this to 0 unless you really know what
 // you are doing.
 // Recommended setting: 1 as setting it to 0 disables many other things
 #define wxUSE_STREAMS       1
 
+// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
+// Note that if the system's implementation does not support positional
+// parameters, setting this to 1 forces the use of the wxWidgets implementation
+// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
+// many Unix systems but usually doesn't under Windows.
+//
+// Positional parameters are very useful when translating a program since using
+// them in formatting strings allow translators to correctly reorder the
+// translated sentences.
+//
+// Default is 1
+//
+// Recommended setting: 1 if you want to support multiple languages
+#define wxUSE_PRINTF_POS_PARAMS      1
+
+
+// ----------------------------------------------------------------------------
+// Interoperability with the standard library.
+// ----------------------------------------------------------------------------
+
+// Set wxUSE_STL to 1 to enable maximal interoperability with the standard
+// library, even at the cost of backwards compatibility.
+//
+// Default is 0
+//
+// Recommended setting: 0 as the options below already provide a relatively
+// good level of interoperability and changing this option arguably isn't worth
+// diverging from the official builds of the library.
+#define wxUSE_STL 0
+
 // This is not a real option but is used as the default value for
-// wxUSE_STD_IOSTREAM and wxUSE_STD_STRING.
+// wxUSE_STD_IOSTREAM, wxUSE_STD_STRING and wxUSE_STD_CONTAINERS.
 //
 // Currently the Digital Mars and Watcom compilers come without standard C++
 // library headers by default, wxUSE_STD_STRING can be set to 1 if you do have
     #define wxUSE_STD_DEFAULT  1
 #endif
 
+// Use standard C++ containers to implement wxVector<>, wxStack<>, wxDList<>
+// and wxHashXXX<> classes. If disabled, wxWidgets own (mostly compatible but
+// usually more limited) implementations are used which allows to avoid the
+// dependency on the C++ run-time library.
+//
+// Default is 1 if compiler supports it.
+//
+// Recommended setting: 1 unless you use a system without good implementation
+// of STL.
+#define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
+
 // Use standard C++ streams if 1 instead of wx streams in some places. If
-// disabled (default), wx streams are used everywhere and wxWidgets doesn't
-// depend on the standard streams library.
+// disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
+// standard streams library.
 //
 // Notice that enabling this does not replace wx streams with std streams
 // everywhere, in a lot of places wx streams are used no matter what.
 //
-// Default is 0
+// Default is 1 if compiler supports it.
 //
 // Recommended setting: 1 if you use the standard streams anyhow and so
 //                      dependency on the standard streams library is not a
 //                      problem
 #define wxUSE_STD_IOSTREAM  wxUSE_STD_DEFAULT
 
-// Enable conversion to standard C++ string if 1.
+// Enable minimal interoperability with the standard C++ string class if 1.
+// "Minimal" means that wxString can be constructed from std::string or
+// std::wstring but can't be implicitly converted to them. You need to enable
+// the option below for the latter.
 //
 // Default is 1 for most compilers.
 //
 //                      the standard C++ library at all.
 #define wxUSE_STD_STRING  wxUSE_STD_DEFAULT
 
-// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
-// Note that if the system's implementation does not support positional
-// parameters, setting this to 1 forces the use of the wxWidgets implementation
-// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
-// many Unix systems but usually doesn't under Windows.
+// Make wxString as much interchangeable with std::[w]string as possible, in
+// particular allow implicit conversion of wxString to either of these classes.
+// This comes at a price (or a benefit, depending on your point of view) of not
+// allowing implicit conversion to "const char *" and "const wchar_t *".
 //
-// Positional parameters are very useful when translating a program since using
-// them in formatting strings allow translators to correctly reorder the
-// translated sentences.
+// Because a lot of existing code relies on these conversions, this option is
+// disabled by default but can be enabled for your build if you don't care
+// about compatibility.
 //
-// Default is 1
+// Default is 0 if wxUSE_STL has its default value or 1 if it is enabled.
 //
-// Recommended setting: 1 if you want to support multiple languages
-#define wxUSE_PRINTF_POS_PARAMS      1
+// Recommended setting: 0 to remain compatible with the official builds of
+// wxWidgets.
+#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL
+
 
 // ----------------------------------------------------------------------------
 // non GUI features selection
index 649c8b845d13f08a7e8217bb43402d499b001725..f9eb8bd557ec857200f19d0197899e22c4cd55ed 100644 (file)
 // Recommended setting: 0 (this is still work in progress...)
 #define wxUSE_EXTENDED_RTTI 0
 
-// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from
-// std::list<Foo*> and std::vector<Foo*>, with a compatibility interface,
-// and for wxHashMap to be implemented with templates.
-//
-// Default is 0
-//
-// Recommended setting: YMMV
-#define wxUSE_STL 0
-
 // Support for message/error logging. This includes wxLogXXX() functions and
 // wxLog and derived classes. Don't set this to 0 unless you really know what
 // you are doing.
 // Recommended setting: 1 as setting it to 0 disables many other things
 #define wxUSE_STREAMS       1
 
+// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
+// Note that if the system's implementation does not support positional
+// parameters, setting this to 1 forces the use of the wxWidgets implementation
+// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
+// many Unix systems but usually doesn't under Windows.
+//
+// Positional parameters are very useful when translating a program since using
+// them in formatting strings allow translators to correctly reorder the
+// translated sentences.
+//
+// Default is 1
+//
+// Recommended setting: 1 if you want to support multiple languages
+#define wxUSE_PRINTF_POS_PARAMS      1
+
+
+// ----------------------------------------------------------------------------
+// Interoperability with the standard library.
+// ----------------------------------------------------------------------------
+
+// Set wxUSE_STL to 1 to enable maximal interoperability with the standard
+// library, even at the cost of backwards compatibility.
+//
+// Default is 0
+//
+// Recommended setting: 0 as the options below already provide a relatively
+// good level of interoperability and changing this option arguably isn't worth
+// diverging from the official builds of the library.
+#define wxUSE_STL 0
+
 // This is not a real option but is used as the default value for
-// wxUSE_STD_IOSTREAM and wxUSE_STD_STRING.
+// wxUSE_STD_IOSTREAM, wxUSE_STD_STRING and wxUSE_STD_CONTAINERS.
 //
 // Currently the Digital Mars and Watcom compilers come without standard C++
 // library headers by default, wxUSE_STD_STRING can be set to 1 if you do have
     #define wxUSE_STD_DEFAULT  1
 #endif
 
+// Use standard C++ containers to implement wxVector<>, wxStack<>, wxDList<>
+// and wxHashXXX<> classes. If disabled, wxWidgets own (mostly compatible but
+// usually more limited) implementations are used which allows to avoid the
+// dependency on the C++ run-time library.
+//
+// Default is 1 if compiler supports it.
+//
+// Recommended setting: 1 unless you use a system without good implementation
+// of STL.
+#define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
+
 // Use standard C++ streams if 1 instead of wx streams in some places. If
-// disabled (default), wx streams are used everywhere and wxWidgets doesn't
-// depend on the standard streams library.
+// disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
+// standard streams library.
 //
 // Notice that enabling this does not replace wx streams with std streams
 // everywhere, in a lot of places wx streams are used no matter what.
 //
-// Default is 0
+// Default is 1 if compiler supports it.
 //
 // Recommended setting: 1 if you use the standard streams anyhow and so
 //                      dependency on the standard streams library is not a
 //                      problem
 #define wxUSE_STD_IOSTREAM  wxUSE_STD_DEFAULT
 
-// Enable conversion to standard C++ string if 1.
+// Enable minimal interoperability with the standard C++ string class if 1.
+// "Minimal" means that wxString can be constructed from std::string or
+// std::wstring but can't be implicitly converted to them. You need to enable
+// the option below for the latter.
 //
 // Default is 1 for most compilers.
 //
 //                      the standard C++ library at all.
 #define wxUSE_STD_STRING  wxUSE_STD_DEFAULT
 
-// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
-// Note that if the system's implementation does not support positional
-// parameters, setting this to 1 forces the use of the wxWidgets implementation
-// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
-// many Unix systems but usually doesn't under Windows.
+// Make wxString as much interchangeable with std::[w]string as possible, in
+// particular allow implicit conversion of wxString to either of these classes.
+// This comes at a price (or a benefit, depending on your point of view) of not
+// allowing implicit conversion to "const char *" and "const wchar_t *".
 //
-// Positional parameters are very useful when translating a program since using
-// them in formatting strings allow translators to correctly reorder the
-// translated sentences.
+// Because a lot of existing code relies on these conversions, this option is
+// disabled by default but can be enabled for your build if you don't care
+// about compatibility.
 //
-// Default is 1
+// Default is 0 if wxUSE_STL has its default value or 1 if it is enabled.
 //
-// Recommended setting: 1 if you want to support multiple languages
-#define wxUSE_PRINTF_POS_PARAMS      1
+// Recommended setting: 0 to remain compatible with the official builds of
+// wxWidgets.
+#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL
+
 
 // ----------------------------------------------------------------------------
 // non GUI features selection
index be2ce532ce4db07c97def9a106e1867aec4ddbb8..1dd16019c46f064c80ad17422f9a347982c5ec40 100644 (file)
 // Recommended setting: 0 (this is still work in progress...)
 #define wxUSE_EXTENDED_RTTI 0
 
-// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from
-// std::list<Foo*> and std::vector<Foo*>, with a compatibility interface,
-// and for wxHashMap to be implemented with templates.
-//
-// Default is 0
-//
-// Recommended setting: YMMV
-#define wxUSE_STL 0
-
 // Support for message/error logging. This includes wxLogXXX() functions and
 // wxLog and derived classes. Don't set this to 0 unless you really know what
 // you are doing.
 // Recommended setting: 1 as setting it to 0 disables many other things
 #define wxUSE_STREAMS       1
 
+// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
+// Note that if the system's implementation does not support positional
+// parameters, setting this to 1 forces the use of the wxWidgets implementation
+// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
+// many Unix systems but usually doesn't under Windows.
+//
+// Positional parameters are very useful when translating a program since using
+// them in formatting strings allow translators to correctly reorder the
+// translated sentences.
+//
+// Default is 1
+//
+// Recommended setting: 1 if you want to support multiple languages
+#define wxUSE_PRINTF_POS_PARAMS      1
+
+
+// ----------------------------------------------------------------------------
+// Interoperability with the standard library.
+// ----------------------------------------------------------------------------
+
+// Set wxUSE_STL to 1 to enable maximal interoperability with the standard
+// library, even at the cost of backwards compatibility.
+//
+// Default is 0
+//
+// Recommended setting: 0 as the options below already provide a relatively
+// good level of interoperability and changing this option arguably isn't worth
+// diverging from the official builds of the library.
+#define wxUSE_STL 0
+
 // This is not a real option but is used as the default value for
-// wxUSE_STD_IOSTREAM and wxUSE_STD_STRING.
+// wxUSE_STD_IOSTREAM, wxUSE_STD_STRING and wxUSE_STD_CONTAINERS.
 //
 // Currently the Digital Mars and Watcom compilers come without standard C++
 // library headers by default, wxUSE_STD_STRING can be set to 1 if you do have
     #define wxUSE_STD_DEFAULT  1
 #endif
 
+// Use standard C++ containers to implement wxVector<>, wxStack<>, wxDList<>
+// and wxHashXXX<> classes. If disabled, wxWidgets own (mostly compatible but
+// usually more limited) implementations are used which allows to avoid the
+// dependency on the C++ run-time library.
+//
+// Default is 1 if compiler supports it.
+//
+// Recommended setting: 1 unless you use a system without good implementation
+// of STL.
+#define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
+
 // Use standard C++ streams if 1 instead of wx streams in some places. If
-// disabled (default), wx streams are used everywhere and wxWidgets doesn't
-// depend on the standard streams library.
+// disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
+// standard streams library.
 //
 // Notice that enabling this does not replace wx streams with std streams
 // everywhere, in a lot of places wx streams are used no matter what.
 //
-// Default is 0
+// Default is 1 if compiler supports it.
 //
 // Recommended setting: 1 if you use the standard streams anyhow and so
 //                      dependency on the standard streams library is not a
 //                      problem
 #define wxUSE_STD_IOSTREAM  wxUSE_STD_DEFAULT
 
-// Enable conversion to standard C++ string if 1.
+// Enable minimal interoperability with the standard C++ string class if 1.
+// "Minimal" means that wxString can be constructed from std::string or
+// std::wstring but can't be implicitly converted to them. You need to enable
+// the option below for the latter.
 //
 // Default is 1 for most compilers.
 //
 //                      the standard C++ library at all.
 #define wxUSE_STD_STRING  wxUSE_STD_DEFAULT
 
-// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
-// Note that if the system's implementation does not support positional
-// parameters, setting this to 1 forces the use of the wxWidgets implementation
-// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
-// many Unix systems but usually doesn't under Windows.
+// Make wxString as much interchangeable with std::[w]string as possible, in
+// particular allow implicit conversion of wxString to either of these classes.
+// This comes at a price (or a benefit, depending on your point of view) of not
+// allowing implicit conversion to "const char *" and "const wchar_t *".
 //
-// Positional parameters are very useful when translating a program since using
-// them in formatting strings allow translators to correctly reorder the
-// translated sentences.
+// Because a lot of existing code relies on these conversions, this option is
+// disabled by default but can be enabled for your build if you don't care
+// about compatibility.
 //
-// Default is 1
+// Default is 0 if wxUSE_STL has its default value or 1 if it is enabled.
 //
-// Recommended setting: 1 if you want to support multiple languages
-#define wxUSE_PRINTF_POS_PARAMS      1
+// Recommended setting: 0 to remain compatible with the official builds of
+// wxWidgets.
+#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL
+
 
 // ----------------------------------------------------------------------------
 // non GUI features selection
index ab20a410fca8af407f73fc525e2d57e62c49d73c..366f0b039f531f3c6f621f9dc0630b7d7d10949a 100644 (file)
 // Recommended setting: 0 (this is still work in progress...)
 #define wxUSE_EXTENDED_RTTI 0
 
-// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from
-// std::list<Foo*> and std::vector<Foo*>, with a compatibility interface,
-// and for wxHashMap to be implemented with templates.
-//
-// Default is 0
-//
-// Recommended setting: YMMV
-#define wxUSE_STL 0
-
 // Support for message/error logging. This includes wxLogXXX() functions and
 // wxLog and derived classes. Don't set this to 0 unless you really know what
 // you are doing.
 // Recommended setting: 1 as setting it to 0 disables many other things
 #define wxUSE_STREAMS       1
 
+// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
+// Note that if the system's implementation does not support positional
+// parameters, setting this to 1 forces the use of the wxWidgets implementation
+// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
+// many Unix systems but usually doesn't under Windows.
+//
+// Positional parameters are very useful when translating a program since using
+// them in formatting strings allow translators to correctly reorder the
+// translated sentences.
+//
+// Default is 1
+//
+// Recommended setting: 1 if you want to support multiple languages
+#define wxUSE_PRINTF_POS_PARAMS      1
+
+
+// ----------------------------------------------------------------------------
+// Interoperability with the standard library.
+// ----------------------------------------------------------------------------
+
+// Set wxUSE_STL to 1 to enable maximal interoperability with the standard
+// library, even at the cost of backwards compatibility.
+//
+// Default is 0
+//
+// Recommended setting: 0 as the options below already provide a relatively
+// good level of interoperability and changing this option arguably isn't worth
+// diverging from the official builds of the library.
+#define wxUSE_STL 0
+
 // This is not a real option but is used as the default value for
-// wxUSE_STD_IOSTREAM and wxUSE_STD_STRING.
+// wxUSE_STD_IOSTREAM, wxUSE_STD_STRING and wxUSE_STD_CONTAINERS.
 //
 // Currently the Digital Mars and Watcom compilers come without standard C++
 // library headers by default, wxUSE_STD_STRING can be set to 1 if you do have
     #define wxUSE_STD_DEFAULT  1
 #endif
 
+// Use standard C++ containers to implement wxVector<>, wxStack<>, wxDList<>
+// and wxHashXXX<> classes. If disabled, wxWidgets own (mostly compatible but
+// usually more limited) implementations are used which allows to avoid the
+// dependency on the C++ run-time library.
+//
+// Default is 1 if compiler supports it.
+//
+// Recommended setting: 1 unless you use a system without good implementation
+// of STL.
+#define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
+
 // Use standard C++ streams if 1 instead of wx streams in some places. If
-// disabled (default), wx streams are used everywhere and wxWidgets doesn't
-// depend on the standard streams library.
+// disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
+// standard streams library.
 //
 // Notice that enabling this does not replace wx streams with std streams
 // everywhere, in a lot of places wx streams are used no matter what.
 //
-// Default is 0
+// Default is 1 if compiler supports it.
 //
 // Recommended setting: 1 if you use the standard streams anyhow and so
 //                      dependency on the standard streams library is not a
 //                      problem
 #define wxUSE_STD_IOSTREAM  wxUSE_STD_DEFAULT
 
-// Enable conversion to standard C++ string if 1.
+// Enable minimal interoperability with the standard C++ string class if 1.
+// "Minimal" means that wxString can be constructed from std::string or
+// std::wstring but can't be implicitly converted to them. You need to enable
+// the option below for the latter.
 //
 // Default is 1 for most compilers.
 //
 //                      the standard C++ library at all.
 #define wxUSE_STD_STRING  wxUSE_STD_DEFAULT
 
-// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
-// Note that if the system's implementation does not support positional
-// parameters, setting this to 1 forces the use of the wxWidgets implementation
-// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
-// many Unix systems but usually doesn't under Windows.
+// Make wxString as much interchangeable with std::[w]string as possible, in
+// particular allow implicit conversion of wxString to either of these classes.
+// This comes at a price (or a benefit, depending on your point of view) of not
+// allowing implicit conversion to "const char *" and "const wchar_t *".
 //
-// Positional parameters are very useful when translating a program since using
-// them in formatting strings allow translators to correctly reorder the
-// translated sentences.
+// Because a lot of existing code relies on these conversions, this option is
+// disabled by default but can be enabled for your build if you don't care
+// about compatibility.
 //
-// Default is 1
+// Default is 0 if wxUSE_STL has its default value or 1 if it is enabled.
 //
-// Recommended setting: 1 if you want to support multiple languages
-#define wxUSE_PRINTF_POS_PARAMS      1
+// Recommended setting: 0 to remain compatible with the official builds of
+// wxWidgets.
+#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL
+
 
 // ----------------------------------------------------------------------------
 // non GUI features selection
index f1c772f57fc0eabaeb46cf5f4fe5144c57fe7f0d..e277c9b0f42d1e26aa60c80d26555b971c740510 100644 (file)
 // Recommended setting: 0 (this is still work in progress...)
 #define wxUSE_EXTENDED_RTTI 0
 
-// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from
-// std::list<Foo*> and std::vector<Foo*>, with a compatibility interface,
-// and for wxHashMap to be implemented with templates.
-//
-// Default is 0
-//
-// Recommended setting: YMMV
-#define wxUSE_STL 0
-
 // Support for message/error logging. This includes wxLogXXX() functions and
 // wxLog and derived classes. Don't set this to 0 unless you really know what
 // you are doing.
 // Recommended setting: 1 as setting it to 0 disables many other things
 #define wxUSE_STREAMS       1
 
+// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
+// Note that if the system's implementation does not support positional
+// parameters, setting this to 1 forces the use of the wxWidgets implementation
+// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
+// many Unix systems but usually doesn't under Windows.
+//
+// Positional parameters are very useful when translating a program since using
+// them in formatting strings allow translators to correctly reorder the
+// translated sentences.
+//
+// Default is 1
+//
+// Recommended setting: 1 if you want to support multiple languages
+#define wxUSE_PRINTF_POS_PARAMS      1
+
+
+// ----------------------------------------------------------------------------
+// Interoperability with the standard library.
+// ----------------------------------------------------------------------------
+
+// Set wxUSE_STL to 1 to enable maximal interoperability with the standard
+// library, even at the cost of backwards compatibility.
+//
+// Default is 0
+//
+// Recommended setting: 0 as the options below already provide a relatively
+// good level of interoperability and changing this option arguably isn't worth
+// diverging from the official builds of the library.
+#define wxUSE_STL 0
+
 // This is not a real option but is used as the default value for
-// wxUSE_STD_IOSTREAM and wxUSE_STD_STRING.
+// wxUSE_STD_IOSTREAM, wxUSE_STD_STRING and wxUSE_STD_CONTAINERS.
 //
 // Currently the Digital Mars and Watcom compilers come without standard C++
 // library headers by default, wxUSE_STD_STRING can be set to 1 if you do have
     #define wxUSE_STD_DEFAULT  1
 #endif
 
+// Use standard C++ containers to implement wxVector<>, wxStack<>, wxDList<>
+// and wxHashXXX<> classes. If disabled, wxWidgets own (mostly compatible but
+// usually more limited) implementations are used which allows to avoid the
+// dependency on the C++ run-time library.
+//
+// Default is 1 if compiler supports it.
+//
+// Recommended setting: 1 unless you use a system without good implementation
+// of STL.
+#define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
+
 // Use standard C++ streams if 1 instead of wx streams in some places. If
-// disabled (default), wx streams are used everywhere and wxWidgets doesn't
-// depend on the standard streams library.
+// disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
+// standard streams library.
 //
 // Notice that enabling this does not replace wx streams with std streams
 // everywhere, in a lot of places wx streams are used no matter what.
 //
-// Default is 0
+// Default is 1 if compiler supports it.
 //
 // Recommended setting: 1 if you use the standard streams anyhow and so
 //                      dependency on the standard streams library is not a
 //                      problem
 #define wxUSE_STD_IOSTREAM  wxUSE_STD_DEFAULT
 
-// Enable conversion to standard C++ string if 1.
+// Enable minimal interoperability with the standard C++ string class if 1.
+// "Minimal" means that wxString can be constructed from std::string or
+// std::wstring but can't be implicitly converted to them. You need to enable
+// the option below for the latter.
 //
 // Default is 1 for most compilers.
 //
 //                      the standard C++ library at all.
 #define wxUSE_STD_STRING  wxUSE_STD_DEFAULT
 
-// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
-// Note that if the system's implementation does not support positional
-// parameters, setting this to 1 forces the use of the wxWidgets implementation
-// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
-// many Unix systems but usually doesn't under Windows.
+// Make wxString as much interchangeable with std::[w]string as possible, in
+// particular allow implicit conversion of wxString to either of these classes.
+// This comes at a price (or a benefit, depending on your point of view) of not
+// allowing implicit conversion to "const char *" and "const wchar_t *".
 //
-// Positional parameters are very useful when translating a program since using
-// them in formatting strings allow translators to correctly reorder the
-// translated sentences.
+// Because a lot of existing code relies on these conversions, this option is
+// disabled by default but can be enabled for your build if you don't care
+// about compatibility.
 //
-// Default is 1
+// Default is 0 if wxUSE_STL has its default value or 1 if it is enabled.
 //
-// Recommended setting: 1 if you want to support multiple languages
-#define wxUSE_PRINTF_POS_PARAMS      1
+// Recommended setting: 0 to remain compatible with the official builds of
+// wxWidgets.
+#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL
+
 
 // ----------------------------------------------------------------------------
 // non GUI features selection
index 59565e19a0fe0486f5c81b775e2d595092c70ef2..27d017ecd3cee39874f7b9090403ca7b2719d3d3 100644 (file)
 // Recommended setting: 0 (this is still work in progress...)
 #define wxUSE_EXTENDED_RTTI 0
 
-// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from
-// std::list<Foo*> and std::vector<Foo*>, with a compatibility interface,
-// and for wxHashMap to be implemented with templates.
-//
-// Default is 0
-//
-// Recommended setting: YMMV
-#define wxUSE_STL 0
-
 // Support for message/error logging. This includes wxLogXXX() functions and
 // wxLog and derived classes. Don't set this to 0 unless you really know what
 // you are doing.
 // Recommended setting: 1 as setting it to 0 disables many other things
 #define wxUSE_STREAMS       1
 
+// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
+// Note that if the system's implementation does not support positional
+// parameters, setting this to 1 forces the use of the wxWidgets implementation
+// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
+// many Unix systems but usually doesn't under Windows.
+//
+// Positional parameters are very useful when translating a program since using
+// them in formatting strings allow translators to correctly reorder the
+// translated sentences.
+//
+// Default is 1
+//
+// Recommended setting: 1 if you want to support multiple languages
+#define wxUSE_PRINTF_POS_PARAMS      1
+
+
+// ----------------------------------------------------------------------------
+// Interoperability with the standard library.
+// ----------------------------------------------------------------------------
+
+// Set wxUSE_STL to 1 to enable maximal interoperability with the standard
+// library, even at the cost of backwards compatibility.
+//
+// Default is 0
+//
+// Recommended setting: 0 as the options below already provide a relatively
+// good level of interoperability and changing this option arguably isn't worth
+// diverging from the official builds of the library.
+#define wxUSE_STL 0
+
 // This is not a real option but is used as the default value for
-// wxUSE_STD_IOSTREAM and wxUSE_STD_STRING.
+// wxUSE_STD_IOSTREAM, wxUSE_STD_STRING and wxUSE_STD_CONTAINERS.
 //
 // Currently the Digital Mars and Watcom compilers come without standard C++
 // library headers by default, wxUSE_STD_STRING can be set to 1 if you do have
     #define wxUSE_STD_DEFAULT  1
 #endif
 
+// Use standard C++ containers to implement wxVector<>, wxStack<>, wxDList<>
+// and wxHashXXX<> classes. If disabled, wxWidgets own (mostly compatible but
+// usually more limited) implementations are used which allows to avoid the
+// dependency on the C++ run-time library.
+//
+// Default is 1 if compiler supports it.
+//
+// Recommended setting: 1 unless you use a system without good implementation
+// of STL.
+#define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
+
 // Use standard C++ streams if 1 instead of wx streams in some places. If
-// disabled (default), wx streams are used everywhere and wxWidgets doesn't
-// depend on the standard streams library.
+// disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
+// standard streams library.
 //
 // Notice that enabling this does not replace wx streams with std streams
 // everywhere, in a lot of places wx streams are used no matter what.
 //
-// Default is 0
+// Default is 1 if compiler supports it.
 //
 // Recommended setting: 1 if you use the standard streams anyhow and so
 //                      dependency on the standard streams library is not a
 //                      problem
 #define wxUSE_STD_IOSTREAM  wxUSE_STD_DEFAULT
 
-// Enable conversion to standard C++ string if 1.
+// Enable minimal interoperability with the standard C++ string class if 1.
+// "Minimal" means that wxString can be constructed from std::string or
+// std::wstring but can't be implicitly converted to them. You need to enable
+// the option below for the latter.
 //
 // Default is 1 for most compilers.
 //
 //                      the standard C++ library at all.
 #define wxUSE_STD_STRING  wxUSE_STD_DEFAULT
 
-// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
-// Note that if the system's implementation does not support positional
-// parameters, setting this to 1 forces the use of the wxWidgets implementation
-// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
-// many Unix systems but usually doesn't under Windows.
+// Make wxString as much interchangeable with std::[w]string as possible, in
+// particular allow implicit conversion of wxString to either of these classes.
+// This comes at a price (or a benefit, depending on your point of view) of not
+// allowing implicit conversion to "const char *" and "const wchar_t *".
 //
-// Positional parameters are very useful when translating a program since using
-// them in formatting strings allow translators to correctly reorder the
-// translated sentences.
+// Because a lot of existing code relies on these conversions, this option is
+// disabled by default but can be enabled for your build if you don't care
+// about compatibility.
 //
-// Default is 1
+// Default is 0 if wxUSE_STL has its default value or 1 if it is enabled.
 //
-// Recommended setting: 1 if you want to support multiple languages
-#define wxUSE_PRINTF_POS_PARAMS      1
+// Recommended setting: 0 to remain compatible with the official builds of
+// wxWidgets.
+#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL
+
 
 // ----------------------------------------------------------------------------
 // non GUI features selection
index 1ca3cd657ad4834c3fee75160efe8fc4fb5a4d47..b4e8ed2f8a889d6a0d351c1bcc18545228776127 100644 (file)
 
 #include "wx/vector.h"
 
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
 
 #include <stack>
 #define wxStack std::stack
 
-#else // !wxUSE_STL
+#else // !wxUSE_STD_CONTAINERS
 
 // Notice that unlike std::stack, wxStack currently always uses wxVector and
 // can't be used with any other underlying container type.
@@ -53,7 +53,7 @@ private:
     container_type m_cont;
 };
 
-#endif // wxUSE_STL/!wxUSE_STL
+#endif // wxUSE_STD_CONTAINERS/!wxUSE_STD_CONTAINERS
 
 
 // Deprecated macro-based class for compatibility only, don't use any more.
index c7f380b5ec7c41da53060a171d8604e8b35f759c..e1cc80ae333a718a60a8b4fa55c0cfd99ee82344 100644 (file)
@@ -1345,12 +1345,13 @@ public:
   }
 #endif // wxUSE_STRING_POS_CACHE
 
-  // even if we're not built with wxUSE_STL == 1 it is very convenient to allow
-  // implicit conversions from std::string to wxString and vice verse as this
-  // allows to use the same strings in non-GUI and GUI code, however we don't
-  // want to unconditionally add this ctor as it would make wx lib dependent on
-  // libstdc++ on some Linux versions which is bad, so instead we ask the
-  // client code to define this wxUSE_STD_STRING symbol if they need it
+  // even if we're not built with wxUSE_STD_STRING_CONV_IN_WXSTRING == 1 it is
+  // very convenient to allow implicit conversions from std::string to wxString
+  // and vice verse as this allows to use the same strings in non-GUI and GUI
+  // code, however we don't want to unconditionally add this ctor as it would
+  // make wx lib dependent on libstdc++ on some Linux versions which is bad, so
+  // instead we ask the client code to define this wxUSE_STD_STRING symbol if
+  // they need it
 #if wxUSE_STD_STRING
   #if wxUSE_UNICODE_WCHAR
     wxString(const wxStdWideString& str) : m_impl(str) {}
@@ -1368,10 +1369,8 @@ public:
   #endif
 #endif // wxUSE_STD_STRING
 
-  // Unlike ctor from std::string, we provide conversion to std::string only
-  // if wxUSE_STL and not merely wxUSE_STD_STRING (which is on by default),
-  // because it conflicts with operator const char/wchar_t* but we still
-  // provide explicit conversions to std::[w]string for convenience in any case
+  // Also always provide explicit conversions to std::[w]string in any case,
+  // see below for the implicit ones.
 #if wxUSE_STD_STRING
   // We can avoid a copy if we already use this string type internally,
   // otherwise we create a copy on the fly:
@@ -1408,13 +1407,14 @@ public:
     }
   #endif
 
-#if wxUSE_STL
-  // In wxUSE_STL case we also provide implicit conversions as there is no
-  // ambiguity with the const char/wchar_t* ones as they are disabled in this
-  // build (for consistency with std::basic_string<>)
+#if wxUSE_STD_STRING_CONV_IN_WXSTRING
+    // Implicit conversions to std::[w]string are not provided by default as
+    // they conflict with the implicit conversions to "const char/wchar_t *"
+    // which we use for backwards compatibility but do provide them if
+    // explicitly requested.
   operator wxStringToStdStringRetType() const { return ToStdString(); }
   operator wxStringToStdWstringRetType() const { return ToStdWstring(); }
-#endif // wxUSE_STL
+#endif // wxUSE_STD_STRING_CONV_IN_WXSTRING
 
 #undef wxStringToStdStringRetType
 #undef wxStringToStdWstringRetType
@@ -1654,11 +1654,12 @@ public:
     operator wxCStrData() const { return c_str(); }
 
     // the first two operators conflict with operators for conversion to
-    // std::string and they must be disabled in STL build; the next one only
-    // makes sense if conversions to char* are also defined and not defining it
-    // in STL build also helps us to get more clear error messages for the code
-    // which relies on implicit conversion to char* in STL build
-#if !wxUSE_STL
+    // std::string and they must be disabled if those conversions are enabled;
+    // the next one only makes sense if conversions to char* are also defined
+    // and not defining it in STL build also helps us to get more clear error
+    // messages for the code which relies on implicit conversion to char* in
+    // STL build
+#if !wxUSE_STD_STRING_CONV_IN_WXSTRING
     operator const char*() const { return c_str(); }
     operator const wchar_t*() const { return c_str(); }
 
@@ -1666,7 +1667,7 @@ public:
     // wxWidgets versions: this is the same as conversion to const char * so it
     // may fail!
     operator const void*() const { return c_str(); }
-#endif // wxUSE_STL
+#endif // !wxUSE_STD_STRING_CONV_IN_WXSTRING
 
     // identical to c_str(), for MFC compatibility
     const wxCStrData GetData() const { return c_str(); }
index 7371bfa39dd80fd72296e39cab676f53ad1cf351..674a3eb5f90ee34801b751f4ff1c6f7ac2a76051 100644 (file)
@@ -11,7 +11,7 @@
 
 /*
     This header implements std::string-like string class, wxStringImpl, that is
-    used by wxString to store the data. Alternatively, if wxUSE_STL=1,
+    used by wxString to store the data. Alternatively, if wxUSE_STD_STRING=1,
     wxStringImpl is just a typedef to std:: string class.
 */
 
@@ -50,15 +50,9 @@ extern WXDLLIMPEXP_DATA_BASE(const wxStringCharType*) wxEmptyStringImpl;
 
 
 // ----------------------------------------------------------------------------
-// deal with STL/non-STL/non-STL-but-wxUSE_STD_STRING
+// deal with various build options
 // ----------------------------------------------------------------------------
 
-// using STL implies using std::string
-#if wxUSE_STL
-    #undef wxUSE_STD_STRING
-    #define wxUSE_STD_STRING 1
-#endif
-
 // we use STL-based string internally if we use std::string at all now, there
 // should be no reason to prefer our internal implement but if you really need
 // it you can predefine wxUSE_STL_BASED_WXSTRING as 0 when building the library
index be0bc2edbe14d3e62d9491ede28d7664b22eb246..09877b29f685e72f1373a47e45ba2e2e0950f234 100644 (file)
 // Recommended setting: 0 (this is still work in progress...)
 #define wxUSE_EXTENDED_RTTI 0
 
-// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from
-// std::list<Foo*> and std::vector<Foo*>, with a compatibility interface,
-// and for wxHashMap to be implemented with templates.
-//
-// Default is 0
-//
-// Recommended setting: YMMV
-#define wxUSE_STL 0
-
 // Support for message/error logging. This includes wxLogXXX() functions and
 // wxLog and derived classes. Don't set this to 0 unless you really know what
 // you are doing.
 // Recommended setting: 1 as setting it to 0 disables many other things
 #define wxUSE_STREAMS       1
 
+// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
+// Note that if the system's implementation does not support positional
+// parameters, setting this to 1 forces the use of the wxWidgets implementation
+// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
+// many Unix systems but usually doesn't under Windows.
+//
+// Positional parameters are very useful when translating a program since using
+// them in formatting strings allow translators to correctly reorder the
+// translated sentences.
+//
+// Default is 1
+//
+// Recommended setting: 1 if you want to support multiple languages
+#define wxUSE_PRINTF_POS_PARAMS      1
+
+
+// ----------------------------------------------------------------------------
+// Interoperability with the standard library.
+// ----------------------------------------------------------------------------
+
+// Set wxUSE_STL to 1 to enable maximal interoperability with the standard
+// library, even at the cost of backwards compatibility.
+//
+// Default is 0
+//
+// Recommended setting: 0 as the options below already provide a relatively
+// good level of interoperability and changing this option arguably isn't worth
+// diverging from the official builds of the library.
+#define wxUSE_STL 0
+
 // This is not a real option but is used as the default value for
-// wxUSE_STD_IOSTREAM and wxUSE_STD_STRING.
+// wxUSE_STD_IOSTREAM, wxUSE_STD_STRING and wxUSE_STD_CONTAINERS.
 //
 // Currently the Digital Mars and Watcom compilers come without standard C++
 // library headers by default, wxUSE_STD_STRING can be set to 1 if you do have
     #define wxUSE_STD_DEFAULT  1
 #endif
 
+// Use standard C++ containers to implement wxVector<>, wxStack<>, wxDList<>
+// and wxHashXXX<> classes. If disabled, wxWidgets own (mostly compatible but
+// usually more limited) implementations are used which allows to avoid the
+// dependency on the C++ run-time library.
+//
+// Default is 1 if compiler supports it.
+//
+// Recommended setting: 1 unless you use a system without good implementation
+// of STL.
+#define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
+
 // Use standard C++ streams if 1 instead of wx streams in some places. If
-// disabled (default), wx streams are used everywhere and wxWidgets doesn't
-// depend on the standard streams library.
+// disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
+// standard streams library.
 //
 // Notice that enabling this does not replace wx streams with std streams
 // everywhere, in a lot of places wx streams are used no matter what.
 //
-// Default is 0
+// Default is 1 if compiler supports it.
 //
 // Recommended setting: 1 if you use the standard streams anyhow and so
 //                      dependency on the standard streams library is not a
 //                      problem
 #define wxUSE_STD_IOSTREAM  wxUSE_STD_DEFAULT
 
-// Enable conversion to standard C++ string if 1.
+// Enable minimal interoperability with the standard C++ string class if 1.
+// "Minimal" means that wxString can be constructed from std::string or
+// std::wstring but can't be implicitly converted to them. You need to enable
+// the option below for the latter.
 //
 // Default is 1 for most compilers.
 //
 //                      the standard C++ library at all.
 #define wxUSE_STD_STRING  wxUSE_STD_DEFAULT
 
-// Support for positional parameters (e.g. %1$d, %2$s ...) in wxVsnprintf.
-// Note that if the system's implementation does not support positional
-// parameters, setting this to 1 forces the use of the wxWidgets implementation
-// of wxVsnprintf. The standard vsnprintf() supports positional parameters on
-// many Unix systems but usually doesn't under Windows.
+// Make wxString as much interchangeable with std::[w]string as possible, in
+// particular allow implicit conversion of wxString to either of these classes.
+// This comes at a price (or a benefit, depending on your point of view) of not
+// allowing implicit conversion to "const char *" and "const wchar_t *".
 //
-// Positional parameters are very useful when translating a program since using
-// them in formatting strings allow translators to correctly reorder the
-// translated sentences.
+// Because a lot of existing code relies on these conversions, this option is
+// disabled by default but can be enabled for your build if you don't care
+// about compatibility.
 //
-// Default is 1
+// Default is 0 if wxUSE_STL has its default value or 1 if it is enabled.
 //
-// Recommended setting: 1 if you want to support multiple languages
-#define wxUSE_PRINTF_POS_PARAMS      1
+// Recommended setting: 0 to remain compatible with the official builds of
+// wxWidgets.
+#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL
+
 
 // ----------------------------------------------------------------------------
 // non GUI features selection
index 1d785e949d1b043f04fb4f8cf362fee84e8dd47e..8cf76d9ff61804d6b2b656d8237379fff705d57e 100644 (file)
@@ -14,7 +14,7 @@
 
 #include "wx/defs.h"
 
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
 
 #include <vector>
 #include <algorithm>
@@ -26,7 +26,7 @@ inline void wxVectorSort(wxVector<T>& v)
     std::sort(v.begin(), v.end());
 }
 
-#else // !wxUSE_STL
+#else // !wxUSE_STD_CONTAINERS
 
 #include "wx/utils.h"
 #include "wx/scopeguard.h"
@@ -485,7 +485,7 @@ void wxVectorSort(wxVector<T>& v)
 
 
 
-#endif // wxUSE_STL/!wxUSE_STL
+#endif // wxUSE_STD_CONTAINERS/!wxUSE_STD_CONTAINERS
 
 #if WXWIN_COMPATIBILITY_2_8
     #define WX_DECLARE_VECTORBASE(obj, cls) typedef wxVector<obj> cls
index 6ac7576dbc9de361a76d63fa8d9a16f65808e824..99f4fd8a5350e9e59de9a40a2f44404b958a6a85 100644 (file)
 
 #define wxUSE_EXTENDED_RTTI 0
 
-#define wxUSE_STL 0
-
 #define wxUSE_LOG 0
 
 #define wxUSE_LOGWINDOW 0
 
 #define wxUSE_STREAMS       0
 
+#define wxUSE_PRINTF_POS_PARAMS      0
+
+
+
+#define wxUSE_STL 0
+
 #if defined(__DMC__) || defined(__WATCOMC__) \
         || (defined(_MSC_VER) && _MSC_VER < 1200)
     #define wxUSE_STD_DEFAULT  0
     #define wxUSE_STD_DEFAULT  0
 #endif
 
+#define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
+
 #define wxUSE_STD_IOSTREAM  wxUSE_STD_DEFAULT
 
 #define wxUSE_STD_STRING  wxUSE_STD_DEFAULT
 
-#define wxUSE_PRINTF_POS_PARAMS      0
+#define wxUSE_STD_STRING_CONV_IN_WXSTRING wxUSE_STL
+
 
 
 #define wxUSE_LONGLONG      0
index be461cc639ccd1a361631d4217c14e32c4520f4e..084196b83ee99a6f3878f5db5f570d8a4cbbc4a3 100644 (file)
@@ -33,7 +33,7 @@
 
 wxArrayString::wxArrayString(size_t sz, const char** a)
 {
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
     Init(false);
 #endif
     for (size_t i=0; i < sz; i++)
@@ -42,7 +42,7 @@ wxArrayString::wxArrayString(size_t sz, const char** a)
 
 wxArrayString::wxArrayString(size_t sz, const wchar_t** a)
 {
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
     Init(false);
 #endif
     for (size_t i=0; i < sz; i++)
@@ -51,14 +51,14 @@ wxArrayString::wxArrayString(size_t sz, const wchar_t** a)
 
 wxArrayString::wxArrayString(size_t sz, const wxString* a)
 {
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
     Init(false);
 #endif
     for (size_t i=0; i < sz; i++)
         Add(a[i]);
 }
 
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
 
 // size increment = min(50% of current size, ARRAY_MAXSIZE_INCREMENT)
 #define   ARRAY_MAXSIZE_INCREMENT       4096
@@ -462,7 +462,7 @@ bool wxArrayString::operator==(const wxArrayString& a) const
     return true;
 }
 
-#endif // !wxUSE_STL
+#endif // !wxUSE_STD_CONTAINERS
 
 // ===========================================================================
 // wxJoin and wxSplit
index cb0d3930492d76aab84dcfe90402aad227bdf875..7de08c279063d0ab5ad45ff89b823c2d0b4d5c3b 100644 (file)
@@ -172,9 +172,9 @@ bool wxCommandProcessor::Redo()
 {
     wxCommand *redoCommand = NULL;
     wxList::compatibility_iterator redoNode
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
         = NULL          // just to avoid warnings
-#endif // !wxUSE_STL
+#endif // !wxUSE_STD_CONTAINERS
         ;
 
     if ( m_currentCommand )
index 3dea79e650d8a122531f55ac3bbfcf7cc2f4ea5f..f57ba4c854dcb1503019f7ece1d2a9ca96ba7365 100644 (file)
@@ -927,9 +927,9 @@ void wxDCImpl::DoDrawSpline( const wxPointList *points )
     wx_spline_add_point(x1, y1);
 
     while ((node = node->GetNext())
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
            != NULL
-#endif // !wxUSE_STL
+#endif // !wxUSE_STD_CONTAINERS
           )
     {
         p = node->GetData();
index 32fc65a8dbc4b67a37d18e386fc9e8b42ea454ac..854196debd1835c643fd215c43b84c692da1a27e 100644 (file)
@@ -696,13 +696,13 @@ void wxGCDCImpl::DoDrawSpline(const wxPointList *points)
 
     path.MoveToPoint( x1 , y1 );
     path.AddLineToPoint( cx1 , cy1 );
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
 
     while ((node = node->GetNext()) != NULL)
 #else
 
     while ((node = node->GetNext()))
-#endif // !wxUSE_STL
+#endif // !wxUSE_STD_CONTAINERS
 
     {
         p = node->GetData();
index 752effe3c23201c4190f98b37a3af8728d3fd361..86a106d5568bae45cd544d0cb470ffdc5c1cd71c 100644 (file)
@@ -28,7 +28,7 @@
 #include <stdlib.h>
 #include <string.h> // for memmove
 
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
 
 // we cast the value to long from which we cast it to void * in IndexForInsert:
 // this can't work if the pointers are not big enough
@@ -383,7 +383,7 @@ _WX_DEFINE_BASEARRAY(double,       wxBaseArrayDouble)
     #pragma warning(pop)
 #endif
 
-#else // wxUSE_STL
+#else // wxUSE_STD_CONTAINERS
 
 #include "wx/arrstr.h"
 
@@ -491,4 +491,4 @@ int wxSortedArrayString::Index(const wxString& str,
     return it - begin();
 }
 
-#endif // !wxUSE_STL/wxUSE_STL
+#endif // !wxUSE_STD_CONTAINERS/wxUSE_STD_CONTAINERS
index 60703f48c9ebb7a24b00a0ddc69389ec92676f1d..8049c945fbdb97b776ac2554ddc22c9bfd608b7a 100644 (file)
@@ -33,7 +33,7 @@
     #include "wx/crt.h"
 #endif
 
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
 
 // =============================================================================
 // implementation
@@ -756,16 +756,16 @@ wxNode *wxStringList::Prepend(const wxChar *s)
 
 #endif // wxLIST_COMPATIBILITY
 
-#else // wxUSE_STL = 1
+#else // wxUSE_STD_CONTAINERS = 1
 
     #include "wx/listimpl.cpp"
     WX_DEFINE_LIST(wxObjectList)
 
-// with wxUSE_STL wxStringList contains wxString objects, not pointers
+// with wxUSE_STD_CONTAINERS wxStringList contains wxString objects, not pointers
 void _WX_LIST_HELPER_wxStringListBase::DeleteFunction( wxString WXUNUSED(X) )
 {
 }
 
 wxStringListBase::BaseListType wxStringListBase::EmptyList;
 
-#endif // !wxUSE_STL
+#endif // !wxUSE_STD_CONTAINERS
index b2c96009acea21c1beed8c5bc7e44624dc75efaf..3e3836e68326e05290f00bc4037fc8787e595621 100644 (file)
@@ -2967,19 +2967,19 @@ wxAccessible* wxWindowBase::CreateAccessible()
 // list classes implementation
 // ----------------------------------------------------------------------------
 
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
 
 #include "wx/listimpl.cpp"
 WX_DEFINE_LIST(wxWindowList)
 
-#else // !wxUSE_STL
+#else // !wxUSE_STD_CONTAINERS
 
 void wxWindowListNode::DeleteData()
 {
     delete (wxWindow *)GetData();
 }
 
-#endif // wxUSE_STL/!wxUSE_STL
+#endif // wxUSE_STD_CONTAINERS/!wxUSE_STD_CONTAINERS
 
 // ----------------------------------------------------------------------------
 // borders
@@ -3283,8 +3283,8 @@ void wxWindowBase::DoMoveInTabOrder(wxWindow *win, WindowOrder move)
     wxWindowList::compatibility_iterator i = siblings.Find(win);
     wxCHECK_RET( i, wxT("MoveBefore/AfterInTabOrder(): win is not a sibling") );
 
-    // unfortunately, when wxUSE_STL == 1 DetachNode() is not implemented so we
-    // can't just move the node around
+    // unfortunately, when wxUSE_STD_CONTAINERS == 1 DetachNode() is not
+    // implemented so we can't just move the node around
     wxWindow *self = (wxWindow *)this;
     siblings.DeleteObject(self);
     if ( move == OrderAfter )
index 81fdb5558717be44d6f1e809ecfdf816f3dae0b9..c630843c6751945836b61785fd7f00cca06b5ee6 100644 (file)
@@ -1048,11 +1048,11 @@ void wxMSWDCImpl::DoDrawSpline(const wxPointList *points)
     lppt[ bezier_pos ] = lppt[ bezier_pos-1 ];
     bezier_pos++;
 
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
     while ((node = node->GetNext()) != NULL)
 #else
     while ((node = node->GetNext()))
-#endif // !wxUSE_STL
+#endif // !wxUSE_STD_CONTAINERS
     {
         p = (wxPoint *)node->GetData();
         x1 = x2;
index bb3427a8576d4e1810a5f2cbde9a0da8348f1616..e610b8c86fff6888b364375dbfe10339d198d96c 100644 (file)
@@ -78,7 +78,7 @@ bool wxChoice::Create(wxWindow *parent,
 
     MacPostControlCreate( pos, size );
 
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
     if ( style & wxCB_SORT )
         // autosort
         m_strings = wxArrayString( 1 );
@@ -109,7 +109,7 @@ int wxChoice::DoInsertItems(const wxArrayStringsAdapter & items,
     {
         unsigned int idx;
 
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
         if ( IsSorted() )
         {
             wxArrayString::iterator
@@ -118,7 +118,7 @@ int wxChoice::DoInsertItems(const wxArrayStringsAdapter & items,
             m_strings.insert( insertPoint, items[i] );
         }
         else
-#endif // wxUSE_STL
+#endif // wxUSE_STD_CONTAINERS
         {
             idx = pos;
             m_strings.Insert( items[i], idx );
@@ -189,7 +189,7 @@ unsigned int wxChoice::GetCount() const
 
 int wxChoice::FindString( const wxString& s, bool bCase ) const
 {
-#if !wxUSE_STL
+#if !wxUSE_STD_CONTAINERS
     // Avoid assert for non-default args passed to sorted array Index
     if ( IsSorted() )
         bCase = true;
index 43c70db21561b60462b4938b4e5c2a2b36a3b91e..c92a71592d42a7113aa65d7a3e2ebbb6f83a2583 100644 (file)
@@ -545,7 +545,7 @@ void SurfaceImpl::MeasureWidths(Font &font, const char *s, int len, int *positio
 #else
 
     // If not unicode then just use the widths we have
-#if wxUSE_STL
+#if wxUSE_STD_CONTAINERS
     std::copy(tpos.begin(), tpos.end(), positions);
 #else
     memcpy(positions, tpos.begin(), len * sizeof(int));