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 | |
26 | namespace boost |
27 | { |
28 | |
29 | // verify that types are complete for increased safety |
30 | |
31 | template<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 | |
39 | template<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 | |
46 | template<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 | |
58 | template<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 | |