]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/variant.cpp
1. added wxAssertIsEqual() function to be used in wxASSERT()
[wxWidgets.git] / src / common / variant.cpp
index a8ab35073d36e317380553c42afecf6aa4a3173d..0ada278e3eb75c8b89d35f7b814809119b685cc3 100644 (file)
 #include "wx/string.h"
 #include "wx/variant.h"
 
 #include "wx/string.h"
 #include "wx/variant.h"
 
+#if wxUSE_TIMEDATE
 IMPLEMENT_DYNAMIC_CLASS(wxDate, wxObject)
 IMPLEMENT_DYNAMIC_CLASS(wxTime, wxObject)
 
 wxTime::tFormat    wxTime::ms_Format    = wxTime::wx12h;
 wxTime::tPrecision wxTime::ms_Precision  = wxTime::wxStdMinSec;
 IMPLEMENT_DYNAMIC_CLASS(wxDate, wxObject)
 IMPLEMENT_DYNAMIC_CLASS(wxTime, wxObject)
 
 wxTime::tFormat    wxTime::ms_Format    = wxTime::wx12h;
 wxTime::tPrecision wxTime::ms_Precision  = wxTime::wxStdMinSec;
+wxChar             wxTime::ms_bufTime[128];
+#endif
 
 IMPLEMENT_ABSTRACT_CLASS(wxVariantData, wxObject)
 
 
 IMPLEMENT_ABSTRACT_CLASS(wxVariantData, wxObject)
 
@@ -66,11 +69,11 @@ public:
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Write(ostream& str) const;
+    virtual bool Write(wxSTD ostream& str) const;
 #endif
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
 #endif
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Read(istream& str);
+    virtual bool Read(wxSTD istream& str);
 #endif
     virtual bool Read(wxString& str);
     virtual wxString GetType() const { return wxT("list"); };
 #endif
     virtual bool Read(wxString& str);
     virtual wxString GetType() const { return wxT("list"); };
@@ -154,7 +157,7 @@ bool wxVariantDataList::Eq(wxVariantData& data) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataList::Write(ostream& str) const
+bool wxVariantDataList::Write(wxSTD ostream& str) const
 {
     wxString s;
     Write(s);
 {
     wxString s;
     Write(s);
@@ -181,7 +184,7 @@ bool wxVariantDataList::Write(wxString& str) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataList::Read(istream& WXUNUSED(str))
+bool wxVariantDataList::Read(wxSTD istream& WXUNUSED(str))
 {
     wxFAIL_MSG(wxT("Unimplemented"));
     // TODO
 {
     wxFAIL_MSG(wxT("Unimplemented"));
     // TODO
@@ -213,11 +216,11 @@ public:
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Write(ostream& str) const;
+    virtual bool Write(wxSTD ostream& str) const;
 #endif
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
 #endif
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Read(istream& str);
+    virtual bool Read(wxSTD istream& str);
 #endif
     virtual bool Read(wxString& str);
     virtual wxString GetType() const { return wxT("stringlist"); };
 #endif
     virtual bool Read(wxString& str);
     virtual wxString GetType() const { return wxT("stringlist"); };
@@ -263,7 +266,7 @@ bool wxVariantDataStringList::Eq(wxVariantData& data) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataStringList::Write(ostream& str) const
+bool wxVariantDataStringList::Write(wxSTD ostream& str) const
 {
     wxString s;
     Write(s);
 {
     wxString s;
     Write(s);
@@ -289,7 +292,7 @@ bool wxVariantDataStringList::Write(wxString& str) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataStringList::Read(istream& WXUNUSED(str))
+bool wxVariantDataStringList::Read(wxSTD istream& WXUNUSED(str))
 {
     wxFAIL_MSG(wxT("Unimplemented"));
     // TODO
 {
     wxFAIL_MSG(wxT("Unimplemented"));
     // TODO
@@ -324,8 +327,8 @@ public:
     virtual bool Read(wxString& str);
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
     virtual bool Read(wxString& str);
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Read(istream& str);
-    virtual bool Write(ostream& str) const;
+    virtual bool Read(wxSTD istream& str);
+    virtual bool Write(wxSTD ostream& str) const;
 #endif
 #if wxUSE_STREAMS
     virtual bool Read(wxInputStream& str);
 #endif
 #if wxUSE_STREAMS
     virtual bool Read(wxInputStream& str);
@@ -359,7 +362,7 @@ bool wxVariantDataLong::Eq(wxVariantData& data) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataLong::Write(ostream& str) const
+bool wxVariantDataLong::Write(wxSTD ostream& str) const
 {
     wxString s;
     Write(s);
 {
     wxString s;
     Write(s);
@@ -375,7 +378,7 @@ bool wxVariantDataLong::Write(wxString& str) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataLong::Read(istream& str)
+bool wxVariantDataLong::Read(wxSTD istream& str)
 {
     str >> m_value;
     return TRUE;
 {
     str >> m_value;
     return TRUE;
@@ -423,11 +426,11 @@ public:
     virtual bool Eq(wxVariantData& data) const;
     virtual bool Read(wxString& str);
 #if wxUSE_STD_IOSTREAM
     virtual bool Eq(wxVariantData& data) const;
     virtual bool Read(wxString& str);
 #if wxUSE_STD_IOSTREAM
-    virtual bool Write(ostream& str) const;
+    virtual bool Write(wxSTD ostream& str) const;
 #endif
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
 #endif
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Read(istream& str);
+    virtual bool Read(wxSTD istream& str);
 #endif
 #if wxUSE_STREAMS
     virtual bool Read(wxInputStream& str);
 #endif
 #if wxUSE_STREAMS
     virtual bool Read(wxInputStream& str);
@@ -460,7 +463,7 @@ bool wxVariantDataReal::Eq(wxVariantData& data) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataReal::Write(ostream& str) const
+bool wxVariantDataReal::Write(wxSTD ostream& str) const
 {
     wxString s;
     Write(s);
 {
     wxString s;
     Write(s);
@@ -476,7 +479,7 @@ bool wxVariantDataReal::Write(wxString& str) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataReal::Read(istream& str)
+bool wxVariantDataReal::Read(wxSTD istream& str)
 {
     str >> m_value;
     return TRUE;
 {
     str >> m_value;
     return TRUE;
@@ -523,12 +526,12 @@ public:
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Write(ostream& str) const;
+    virtual bool Write(wxSTD ostream& str) const;
 #endif
     virtual bool Write(wxString& str) const;
     virtual bool Read(wxString& str);
 #if wxUSE_STD_IOSTREAM
 #endif
     virtual bool Write(wxString& str) const;
     virtual bool Read(wxString& str);
 #if wxUSE_STD_IOSTREAM
-    virtual bool Read(istream& str);
+    virtual bool Read(wxSTD istream& str);
 #endif
 #if wxUSE_STREAMS
     virtual bool Read(wxInputStream& str);
 #endif
 #if wxUSE_STREAMS
     virtual bool Read(wxInputStream& str);
@@ -561,7 +564,7 @@ bool wxVariantDataBool::Eq(wxVariantData& data) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataBool::Write(ostream& str) const
+bool wxVariantDataBool::Write(wxSTD ostream& str) const
 {
     wxString s;
     Write(s);
 {
     wxString s;
     Write(s);
@@ -577,7 +580,7 @@ bool wxVariantDataBool::Write(wxString& str) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataBool::Read(istream& WXUNUSED(str))
+bool wxVariantDataBool::Read(wxSTD istream& WXUNUSED(str))
 {
     wxFAIL_MSG(wxT("Unimplemented"));
 //    str >> (long) m_value;
 {
     wxFAIL_MSG(wxT("Unimplemented"));
 //    str >> (long) m_value;
@@ -627,8 +630,8 @@ public:
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Read(istream& str);
-    virtual bool Write(ostream& str) const;
+    virtual bool Read(wxSTD istream& str);
+    virtual bool Write(wxSTD ostream& str) const;
 #endif
     virtual bool Read(wxString& str);
     virtual bool Write(wxString& str) const;
 #endif
     virtual bool Read(wxString& str);
     virtual bool Write(wxString& str) const;
@@ -663,7 +666,7 @@ bool wxVariantDataChar::Eq(wxVariantData& data) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataChar::Write(ostream& str) const
+bool wxVariantDataChar::Write(wxSTD ostream& str) const
 {
     wxString s;
     Write(s);
 {
     wxString s;
     Write(s);
@@ -679,7 +682,7 @@ bool wxVariantDataChar::Write(wxString& str) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataChar::Read(istream& WXUNUSED(str))
+bool wxVariantDataChar::Read(wxSTD istream& WXUNUSED(str))
 {
     wxFAIL_MSG(wxT("Unimplemented"));
 //    str >> m_value;
 {
     wxFAIL_MSG(wxT("Unimplemented"));
 //    str >> m_value;
@@ -737,12 +740,12 @@ public:
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Write(ostream& str) const;
+    virtual bool Write(wxSTD ostream& str) const;
 #endif
     virtual bool Read(wxString& str);
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
 #endif
     virtual bool Read(wxString& str);
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Read(istream& str);
+    virtual bool Read(wxSTD istream& str);
 #endif
 #if wxUSE_STREAMS
     virtual bool Read(wxInputStream& str);
 #endif
 #if wxUSE_STREAMS
     virtual bool Read(wxInputStream& str);
@@ -773,7 +776,7 @@ bool wxVariantDataString::Eq(wxVariantData& data) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataString::Write(ostream& str) const
+bool wxVariantDataString::Write(wxSTD ostream& str) const
 {
     str << (const char*) m_value.mb_str();
     return TRUE;
 {
     str << (const char*) m_value.mb_str();
     return TRUE;
@@ -787,7 +790,7 @@ bool wxVariantDataString::Write(wxString& str) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataString::Read(istream& str)
+bool wxVariantDataString::Read(wxSTD istream& str)
 {
     str >> m_value;
     return TRUE;
 {
     str >> m_value;
     return TRUE;
@@ -828,7 +831,8 @@ IMPLEMENT_DYNAMIC_CLASS(wxVariantDataString, wxVariantData)
  * wxVariantDataTime
  */
 
  * wxVariantDataTime
  */
 
-#if wxUSE_TIMEDATE
+// For some reason, Watcom C++ can't link variant.cpp with time/date classes compiled
+#if wxUSE_TIMEDATE && !defined(__WATCOMC__)
 
 class wxVariantDataTime: public wxVariantData
 {
 
 class wxVariantDataTime: public wxVariantData
 {
@@ -843,11 +847,11 @@ public:
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Write(ostream& str) const;
+    virtual bool Write(wxSTD ostream& str) const;
 #endif
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
 #endif
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Read(istream& str);
+    virtual bool Read(wxSTD istream& str);
 #endif
     virtual bool Read(wxString& str);
     virtual wxString GetType() const { return wxT("time"); };
 #endif
     virtual bool Read(wxString& str);
     virtual wxString GetType() const { return wxT("time"); };
@@ -878,7 +882,7 @@ bool wxVariantDataTime::Eq(wxVariantData& data) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataTime::Write(ostream& str) const
+bool wxVariantDataTime::Write(wxSTD ostream& str) const
 {
     wxString s;
     Write(s);
 {
     wxString s;
     Write(s);
@@ -895,7 +899,7 @@ bool wxVariantDataTime::Write(wxString& str) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataTime::Read(istream& WXUNUSED(str))
+bool wxVariantDataTime::Read(wxSTD istream& WXUNUSED(str))
 {
     // Not implemented
     return FALSE;
 {
     // Not implemented
     return FALSE;
@@ -925,11 +929,11 @@ public:
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Write(ostream& str) const;
+    virtual bool Write(wxSTD ostream& str) const;
 #endif
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
 #endif
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Read(istream& str);
+    virtual bool Read(wxSTD istream& str);
 #endif
     virtual bool Read(wxString& str);
     virtual wxString GetType() const { return wxT("date"); };
 #endif
     virtual bool Read(wxString& str);
     virtual wxString GetType() const { return wxT("date"); };
@@ -960,7 +964,7 @@ bool wxVariantDataDate::Eq(wxVariantData& data) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataDate::Write(ostream& str) const
+bool wxVariantDataDate::Write(wxSTD ostream& str) const
 {
     wxString s;
     Write(s);
 {
     wxString s;
     Write(s);
@@ -976,7 +980,7 @@ bool wxVariantDataDate::Write(wxString& str) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataDate::Read(istream& WXUNUSED(str))
+bool wxVariantDataDate::Read(wxSTD istream& WXUNUSED(str))
 {
     // Not implemented
     return FALSE;
 {
     // Not implemented
     return FALSE;
@@ -1008,11 +1012,11 @@ public:
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
     virtual void Copy(wxVariantData& data);
     virtual bool Eq(wxVariantData& data) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Write(ostream& str) const;
+    virtual bool Write(wxSTD ostream& str) const;
 #endif
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
 #endif
     virtual bool Write(wxString& str) const;
 #if wxUSE_STD_IOSTREAM
-    virtual bool Read(istream& str);
+    virtual bool Read(wxSTD istream& str);
 #endif
     virtual bool Read(wxString& str);
     virtual wxString GetType() const { return wxT("void*"); };
 #endif
     virtual bool Read(wxString& str);
     virtual wxString GetType() const { return wxT("void*"); };
@@ -1043,7 +1047,7 @@ bool wxVariantDataVoidPtr::Eq(wxVariantData& data) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataVoidPtr::Write(ostream& str) const
+bool wxVariantDataVoidPtr::Write(wxSTD ostream& str) const
 {
     wxString s;
     Write(s);
 {
     wxString s;
     Write(s);
@@ -1059,7 +1063,7 @@ bool wxVariantDataVoidPtr::Write(wxString& str) const
 }
 
 #if wxUSE_STD_IOSTREAM
 }
 
 #if wxUSE_STD_IOSTREAM
-bool wxVariantDataVoidPtr::Read(istream& WXUNUSED(str))
+bool wxVariantDataVoidPtr::Read(wxSTD istream& WXUNUSED(str))
 {
     // Not implemented
     return FALSE;
 {
     // Not implemented
     return FALSE;
@@ -1135,7 +1139,8 @@ wxVariant::wxVariant(const wxList& val, const wxString& name) // List of variant
     m_name = name;
 }
 
     m_name = name;
 }
 
-#if wxUSE_TIMEDATE
+// For some reason, Watcom C++ can't link variant.cpp with time/date classes compiled
+#if wxUSE_TIMEDATE && !defined(__WATCOMC__)
 wxVariant::wxVariant(const wxTime& val, const wxString& name) // Time
 {
     m_data = new wxVariantDataTime(val);
 wxVariant::wxVariant(const wxTime& val, const wxString& name) // Time
 {
     m_data = new wxVariantDataTime(val);
@@ -1348,8 +1353,8 @@ bool wxVariant::operator== (const wxString& value) const
     wxString thisValue;
     if (!Convert(&thisValue))
         return FALSE;
     wxString thisValue;
     if (!Convert(&thisValue))
         return FALSE;
-    else
-        return (value == thisValue);
+
+    return value == thisValue;
 }
 
 bool wxVariant::operator!= (const wxString& value) const
 }
 
 bool wxVariant::operator!= (const wxString& value) const
@@ -1439,14 +1444,15 @@ void wxVariant::operator= (const wxList& value)
     }
 }
 
     }
 }
 
-#if wxUSE_TIMEDATE
+// For some reason, Watcom C++ can't link variant.cpp with time/date classes compiled
+#if wxUSE_TIMEDATE && !defined(__WATCOMC__)
 bool wxVariant::operator== (const wxTime& value) const
 {
     wxTime thisValue;
     if (!Convert(&thisValue))
         return FALSE;
 bool wxVariant::operator== (const wxTime& value) const
 {
     wxTime thisValue;
     if (!Convert(&thisValue))
         return FALSE;
-    else
-        return (value == thisValue);
+
+    return value == thisValue;
 }
 
 bool wxVariant::operator!= (const wxTime& value) const
 }
 
 bool wxVariant::operator!= (const wxTime& value) const
@@ -1473,8 +1479,8 @@ bool wxVariant::operator== (const wxDate& value) const
     wxDate thisValue;
     if (!Convert(&thisValue))
         return FALSE;
     wxDate thisValue;
     if (!Convert(&thisValue))
         return FALSE;
-    else
-        return (value == thisValue);
+
+    return (value == thisValue);
 }
 
 bool wxVariant::operator!= (const wxDate& value) const
 }
 
 bool wxVariant::operator!= (const wxDate& value) const
@@ -1504,7 +1510,7 @@ bool wxVariant::operator== (void* value) const
 
 bool wxVariant::operator!= (void* value) const
 {
 
 bool wxVariant::operator!= (void* value) const
 {
-    return (!((*this) == value));
+    return (!((*this) == (void*) value));
 }
 
 void wxVariant::operator= (void* value)
 }
 
 void wxVariant::operator= (void* value)
@@ -1663,40 +1669,38 @@ bool wxVariant::GetBool() const
 wxString wxVariant::GetString() const
 {
     wxString value;
 wxString wxVariant::GetString() const
 {
     wxString value;
-    if (Convert(& value))
-        return value;
-    else
+    if (!Convert(& value))
     {
         wxFAIL_MSG(wxT("Could not convert to a string"));
     {
         wxFAIL_MSG(wxT("Could not convert to a string"));
-        return wxString("");
     }
     }
+
+    return value;
 }
 
 }
 
-#if wxUSE_TIMEDATE
+// For some reason, Watcom C++ can't link variant.cpp with time/date classes compiled
+#if wxUSE_TIMEDATE && !defined(__WATCOMC__)
 wxTime wxVariant::GetTime() const
 {
     wxTime value;
 wxTime wxVariant::GetTime() const
 {
     wxTime value;
-    if (Convert(& value))
-        return value;
-    else
+    if (!Convert(& value))
     {
         wxFAIL_MSG(wxT("Could not convert to a time"));
     {
         wxFAIL_MSG(wxT("Could not convert to a time"));
-        return wxTime();
     }
     }
+
+    return value;
 }
 
 wxDate wxVariant::GetDate() const
 {
     wxDate value;
 }
 
 wxDate wxVariant::GetDate() const
 {
     wxDate value;
-    if (Convert(& value))
-        return value;
-    else
+    if (!Convert(& value))
     {
         wxFAIL_MSG(wxT("Could not convert to a date"));
     {
         wxFAIL_MSG(wxT("Could not convert to a date"));
-        return wxDate();
     }
     }
+
+    return value;
 }
 }
-#endif
+#endif // wxUSE_TIMEDATE
 
 void* wxVariant::GetVoidPtr() const
 {
 
 void* wxVariant::GetVoidPtr() const
 {
@@ -1872,7 +1876,8 @@ bool wxVariant::Convert(wxString* value) const
     return TRUE;
 }
 
     return TRUE;
 }
 
-#if wxUSE_TIMEDATE
+// For some reason, Watcom C++ can't link variant.cpp with time/date classes compiled
+#if wxUSE_TIMEDATE && !defined(__WATCOMC__)
 bool wxVariant::Convert(wxTime* value) const
 {
     wxString type(GetType());
 bool wxVariant::Convert(wxTime* value) const
 {
     wxString type(GetType());
@@ -1898,3 +1903,4 @@ bool wxVariant::Convert(wxDate* value) const
 }
 #endif
  // wxUSE_TIMEDATE
 }
 #endif
  // wxUSE_TIMEDATE
+