1#ifndef BOOST_CORE_CHECKED_DELETE_HPP
2#define BOOST_CORE_CHECKED_DELETE_HPP
3
4// MS compatible compilers support #pragma once
5
6#if defined(_MSC_VER) && (_MSC_VER >= 1020)
7# pragma once
8#endif
9
10#include <boost/config.hpp>
11
12//
13// boost/checked_delete.hpp
14//
15// Copyright (c) 2002, 2003 Peter Dimov
16// Copyright (c) 2003 Daniel Frey
17// Copyright (c) 2003 Howard Hinnant
18//
19// Distributed under the Boost Software License, Version 1.0. (See
20// accompanying file LICENSE_1_0.txt or copy at
21// http://www.boost.org/LICENSE_1_0.txt)
22//
23// See http://www.boost.org/libs/core/doc/html/core/checked_delete.html for documentation.
24//
25
26namespace boost
27{
28
29// verify that types are complete for increased safety
30
31template<class T> inline void checked_delete(T * x) BOOST_NOEXCEPT
32{
33 // intentionally complex - simplification causes regressions
34 typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
35 (void) sizeof(type_must_be_complete);
36 delete x;
37}
38
39template<class T> inline void checked_array_delete(T * x) BOOST_NOEXCEPT
40{
41 typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
42 (void) sizeof(type_must_be_complete);
43 delete [] x;
44}
45
46template<class T> struct checked_deleter
47{
48 typedef void result_type;
49 typedef T * argument_type;
50
51 void operator()(T * x) const BOOST_NOEXCEPT
52 {
53 // boost:: disables ADL
54 boost::checked_delete(x);
55 }
56};
57
58template<class T> struct checked_array_deleter
59{
60 typedef void result_type;
61 typedef T * argument_type;
62
63 void operator()(T * x) const BOOST_NOEXCEPT
64 {
65 boost::checked_array_delete(x);
66 }
67};
68
69} // namespace boost
70
71#endif // #ifndef BOOST_CORE_CHECKED_DELETE_HPP
72

source code of include/boost/core/checked_delete.hpp