wxString(const std::string& str)
{ assign(str.c_str(), str.length()); }
#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*:
+#if wxUSE_STL
#if wxUSE_UNICODE_WCHAR && wxUSE_STL_BASED_WXSTRING
// wxStringImpl is std::string in the encoding we want
operator const wxStdWideString&() const { return m_impl; }
// implicit conversion to C string
operator wxCStrData() const { return c_str(); }
+
+ // these operators conflict with operators for conversion to std::string,
+ // so they must be disabled in STL build:
+#if !wxUSE_STL
operator const char*() const { return c_str(); }
operator const wchar_t*() const { return c_str(); }
+#endif
// implicit conversion to untyped pointer for compatibility with previous
// wxWidgets versions: this is the same as conversion to const char * so it
-///////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
// Name: tests/strings/stdstrings.cpp
// Purpose: wxString unit test
// Author: Vadim Zeitlin, Wlodzimierz ABX Skiba
CPPUNIT_ASSERT( s7 == s1 );
CPPUNIT_ASSERT( s8 == _T("efgh") );
- const char *pc = s1;
+ const char *pc = s1.c_str();
WX_ASSERT_STR_EQUAL( "bcd", wxString(pc + 1, pc + 4) );
const wchar_t *pw = s2.c_str();
CPPUNIT_ASSERT( s5 == _T("aaa") );
CPPUNIT_ASSERT( s6 == _T("ef") );
- const char *pc = s1;
+ const char *pc = s1.c_str();
s7.assign(pc, pc + 2);
WX_ASSERT_STR_EQUAL( "de", s7 );
CPPUNIT_ASSERT( s3 == "std::wstring value" );
wxString s4("hello");
+
+ // wxString -> std::string conversion is only available in wxUSE_STL case,
+ // because it conflicts with conversion to const char*/wchar_t*:
+#if wxUSE_STL
std::string s5 = s4;
CPPUNIT_ASSERT( s5 == "hello" );
wxStdWideString s6 = s4;
CPPUNIT_ASSERT( s6 == "hello" );
+#endif
+
+ std::string s7(s4);
+ CPPUNIT_ASSERT( s7 == "hello" );
+
+ wxStdWideString s8(s4);
+ CPPUNIT_ASSERT( s8 == "hello" );
}
#endif // wxUSE_STD_STRING
wxString s("foo");
CPPUNIT_ASSERT( CheckStrConstWChar(s, s.c_str()) );
- CPPUNIT_ASSERT( CheckStrConstWChar(s, s) );
-
CPPUNIT_ASSERT( CheckStrConstChar(s, s.c_str()) );
+
+ // implicit conversion of wxString is not available in STL build
+#if !wxUSE_STL
+ CPPUNIT_ASSERT( CheckStrConstWChar(s, s) );
CPPUNIT_ASSERT( CheckStrConstChar(s, s) );
+#endif
}
void StringTestCase::ExplicitConversion()