| #ifndef NDNBOOST_CHECKED_DELETE_HPP_INCLUDED |
| #define NDNBOOST_CHECKED_DELETE_HPP_INCLUDED |
| |
| // MS compatible compilers support #pragma once |
| |
| #if defined(_MSC_VER) && (_MSC_VER >= 1020) |
| # pragma once |
| #endif |
| |
| // |
| // ndnboost/checked_delete.hpp |
| // |
| // Copyright (c) 2002, 2003 Peter Dimov |
| // Copyright (c) 2003 Daniel Frey |
| // Copyright (c) 2003 Howard Hinnant |
| // |
| // Distributed under the Boost Software License, Version 1.0. (See |
| // accompanying file LICENSE_1_0.txt or copy at |
| // http://www.boost.org/LICENSE_1_0.txt) |
| // |
| // See http://www.boost.org/libs/utility/checked_delete.html for documentation. |
| // |
| |
| namespace ndnboost |
| { |
| |
| // verify that types are complete for increased safety |
| |
| template<class T> inline void checked_delete(T * x) |
| { |
| // intentionally complex - simplification causes regressions |
| typedef char type_must_be_complete[ sizeof(T)? 1: -1 ]; |
| (void) sizeof(type_must_be_complete); |
| delete x; |
| } |
| |
| template<class T> inline void checked_array_delete(T * x) |
| { |
| typedef char type_must_be_complete[ sizeof(T)? 1: -1 ]; |
| (void) sizeof(type_must_be_complete); |
| delete [] x; |
| } |
| |
| template<class T> struct checked_deleter |
| { |
| typedef void result_type; |
| typedef T * argument_type; |
| |
| void operator()(T * x) const |
| { |
| // ndnboost:: disables ADL |
| ndnboost::checked_delete(x); |
| } |
| }; |
| |
| template<class T> struct checked_array_deleter |
| { |
| typedef void result_type; |
| typedef T * argument_type; |
| |
| void operator()(T * x) const |
| { |
| ndnboost::checked_array_delete(x); |
| } |
| }; |
| |
| } // namespace ndnboost |
| |
| #endif // #ifndef NDNBOOST_CHECKED_DELETE_HPP_INCLUDED |