4d3845c073
This loop can't be optimized away by the compiler because wxFalse is an extern variable which can't be known to be always false. Additionally, this creates many false positives from Coverity as it assumes that the loop can be executed more than once. Define wxSTATEMENT_MACRO_BEGIN/END macros abstracting the exact solution used and replace wxFalse with "(void)0, 0" for now as this seems to placate MSVC (which warns about using a bare "0" as a condition) while still allowing the loop to be completely optimized away. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73101 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
46 lines
1.8 KiB
C
46 lines
1.8 KiB
C
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/checkeddelete.h
|
|
// Purpose: wxCHECKED_DELETE() macro
|
|
// Author: Vadim Zeitlin
|
|
// Created: 2009-02-03
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) 2002-2009 wxWidgets dev team
|
|
// Licence: wxWindows licence
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_CHECKEDDELETE_H_
|
|
#define _WX_CHECKEDDELETE_H_
|
|
|
|
#include "wx/cpp.h"
|
|
|
|
// TODO: provide wxCheckedDelete[Array]() template functions too
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxCHECKED_DELETE and wxCHECKED_DELETE_ARRAY macros
|
|
// ----------------------------------------------------------------------------
|
|
|
|
/*
|
|
checked deleters are used to make sure that the type being deleted is really
|
|
a complete type.: otherwise sizeof() would result in a compile-time error
|
|
|
|
do { ... } while ( 0 ) construct is used to have an anonymous scope
|
|
(otherwise we could have name clashes between different "complete"s) but
|
|
still force a semicolon after the macro
|
|
*/
|
|
|
|
#define wxCHECKED_DELETE(ptr) \
|
|
wxSTATEMENT_MACRO_BEGIN \
|
|
typedef char complete[sizeof(*ptr)]; \
|
|
delete ptr; \
|
|
wxSTATEMENT_MACRO_END
|
|
|
|
#define wxCHECKED_DELETE_ARRAY(ptr) \
|
|
wxSTATEMENT_MACRO_BEGIN \
|
|
typedef char complete[sizeof(*ptr)]; \
|
|
delete [] ptr; \
|
|
wxSTATEMENT_MACRO_END
|
|
|
|
|
|
#endif // _WX_CHECKEDDELETE_H_
|
|
|