Add wxNOEXCEPT and use it for std::streambuf-derived classes.

This fixes warnings from Intel compiler about overriding function using a
different exception specification than the base one and also incidentally
provides a handy macro that can be useful in other situations.

Closes #14826.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72978 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-11-17 23:56:23 +00:00
parent f31f9900e4
commit 1d9f819c69
8 changed files with 36 additions and 8 deletions

View File

@@ -550,6 +550,7 @@ All:
- Add wxFile::ReadAll() for consistency with wxFFile. - Add wxFile::ReadAll() for consistency with wxFFile.
- Add wxDateTime::DiffAsDateSpan() and wxDateSpan::GetTotalMonths() (jonasr). - Add wxDateTime::DiffAsDateSpan() and wxDateSpan::GetTotalMonths() (jonasr).
- Add wxVector::assign() (Jonas Rydberg). - Add wxVector::assign() (Jonas Rydberg).
- Add wxNOEXCEPT (Marian VooDooMan Meravy).
- Added Nepali translation (Him Prasad Gautam). - Added Nepali translation (Him Prasad Gautam).
All (GUI): All (GUI):

View File

@@ -3335,6 +3335,17 @@ typedef const void* WXWidget;
#define DECLARE_NO_ASSIGN_CLASS(classname) \ #define DECLARE_NO_ASSIGN_CLASS(classname) \
wxDECLARE_NO_ASSIGN_CLASS(classname); wxDECLARE_NO_ASSIGN_CLASS(classname);
/* Macro that can be used to indicate that a function doesn't throw. */
#if defined(__cplusplus) && __cplusplus >= 199711L /* C++98 */
# if __cplusplus >= 201103L /* >= C++11 */
# define wxNOEXCEPT noexcept
# else
# define wxNOEXCEPT throw()
# endif
#else
# define wxNOEXCEPT
#endif
/* --------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------- */
/* If a manifest is being automatically generated, add common controls 6 to it */ /* If a manifest is being automatically generated, add common controls 6 to it */
/* --------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------- */

View File

@@ -31,7 +31,7 @@ public:
Create(parent, id, value, pos, size, style, validator, name); Create(parent, id, value, pos, size, style, validator, name);
} }
virtual ~wxTextCtrl(); virtual ~wxTextCtrl() wxNOEXCEPT;
bool Create(wxWindow *parent, wxWindowID id, bool Create(wxWindow *parent, wxWindowID id,
const wxString& value = wxEmptyString, const wxString& value = wxEmptyString,

View File

@@ -28,7 +28,7 @@ class WXDLLIMPEXP_BASE wxStdInputStreamBuffer : public std::streambuf
{ {
public: public:
wxStdInputStreamBuffer(wxInputStream& stream); wxStdInputStreamBuffer(wxInputStream& stream);
virtual ~wxStdInputStreamBuffer() { } virtual ~wxStdInputStreamBuffer() wxNOEXCEPT { }
protected: protected:
virtual std::streambuf *setbuf(char *s, std::streamsize n); virtual std::streambuf *setbuf(char *s, std::streamsize n);
@@ -71,7 +71,7 @@ class WXDLLIMPEXP_BASE wxStdInputStream : public std::istream
{ {
public: public:
wxStdInputStream(wxInputStream& stream); wxStdInputStream(wxInputStream& stream);
virtual ~wxStdInputStream() { } virtual ~wxStdInputStream() wxNOEXCEPT { }
protected: protected:
wxStdInputStreamBuffer m_streamBuffer; wxStdInputStreamBuffer m_streamBuffer;
@@ -85,7 +85,7 @@ class WXDLLIMPEXP_BASE wxStdOutputStreamBuffer : public std::streambuf
{ {
public: public:
wxStdOutputStreamBuffer(wxOutputStream& stream); wxStdOutputStreamBuffer(wxOutputStream& stream);
virtual ~wxStdOutputStreamBuffer() { } virtual ~wxStdOutputStreamBuffer() wxNOEXCEPT { }
protected: protected:
virtual std::streambuf *setbuf(char *s, std::streamsize n); virtual std::streambuf *setbuf(char *s, std::streamsize n);
@@ -112,7 +112,7 @@ class WXDLLIMPEXP_BASE wxStdOutputStream : public std::ostream
{ {
public: public:
wxStdOutputStream(wxOutputStream& stream); wxStdOutputStream(wxOutputStream& stream);
virtual ~wxStdOutputStream() { } virtual ~wxStdOutputStream() wxNOEXCEPT { }
protected: protected:
wxStdOutputStreamBuffer m_streamBuffer; wxStdOutputStreamBuffer m_streamBuffer;

View File

@@ -679,7 +679,7 @@ public:
// -------- // --------
wxTextCtrlBase() { } wxTextCtrlBase() { }
virtual ~wxTextCtrlBase() { } virtual ~wxTextCtrlBase() wxNOEXCEPT { }
// more readable flag testing methods // more readable flag testing methods

View File

@@ -1725,6 +1725,22 @@ template <typename T> wxSwap(T& first, T& second);
*/ */
void wxVaCopy(va_list argptrDst, va_list argptrSrc); void wxVaCopy(va_list argptrDst, va_list argptrSrc);
/**
Macro that can be used to indicate that a function doesn't throw any
exceptions.
This macro expands to `noexcept` when using C++11 compiler or `throw()` for
older C++ compilers or nothing when used with a C++ compiler too old to
support even this.
Notice that `noexcept` and `throw()` have different semantics in case an
exception @e is thrown, so this macro should be used only if you don't rely
on the behaviour provided by the latter but not the former.
@since 2.9.5
*/
#define wxNOEXCEPT
//@} //@}

View File

@@ -940,7 +940,7 @@ class wxComboCtrlTextCtrl : public wxTextCtrl
{ {
public: public:
wxComboCtrlTextCtrl() : wxTextCtrl() { } wxComboCtrlTextCtrl() : wxTextCtrl() { }
virtual ~wxComboCtrlTextCtrl() { } virtual ~wxComboCtrlTextCtrl() wxNOEXCEPT { }
virtual wxWindow *GetMainWindowOfCompositeControl() virtual wxWindow *GetMainWindowOfCompositeControl()
{ {

View File

@@ -77,7 +77,7 @@ public:
SetSizeHints(wxDefaultCoord, wxDefaultCoord); SetSizeHints(wxDefaultCoord, wxDefaultCoord);
} }
virtual ~wxSpinCtrlTextGeneric() virtual ~wxSpinCtrlTextGeneric() wxNOEXCEPT
{ {
// MSW sends extra kill focus event on destroy // MSW sends extra kill focus event on destroy
if (m_spin) if (m_spin)