Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/checked_delete.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
1 #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED | |
2 #define BOOST_CHECKED_DELETE_HPP_INCLUDED | |
3 | |
4 // MS compatible compilers support #pragma once | |
5 | |
6 #if defined(_MSC_VER) && (_MSC_VER >= 1020) | |
7 # pragma once | |
8 #endif | |
9 | |
10 // | |
11 // boost/checked_delete.hpp | |
12 // | |
13 // Copyright (c) 2002, 2003 Peter Dimov | |
14 // Copyright (c) 2003 Daniel Frey | |
15 // Copyright (c) 2003 Howard Hinnant | |
16 // | |
17 // Distributed under the Boost Software License, Version 1.0. (See | |
18 // accompanying file LICENSE_1_0.txt or copy at | |
19 // http://www.boost.org/LICENSE_1_0.txt) | |
20 // | |
21 // See http://www.boost.org/libs/utility/checked_delete.html for documentation. | |
22 // | |
23 | |
24 namespace boost | |
25 { | |
26 | |
27 // verify that types are complete for increased safety | |
28 | |
29 template<class T> inline void checked_delete(T * x) | |
30 { | |
31 // intentionally complex - simplification causes regressions | |
32 typedef char type_must_be_complete[ sizeof(T)? 1: -1 ]; | |
33 (void) sizeof(type_must_be_complete); | |
34 delete x; | |
35 } | |
36 | |
37 template<class T> inline void checked_array_delete(T * x) | |
38 { | |
39 typedef char type_must_be_complete[ sizeof(T)? 1: -1 ]; | |
40 (void) sizeof(type_must_be_complete); | |
41 delete [] x; | |
42 } | |
43 | |
44 template<class T> struct checked_deleter | |
45 { | |
46 typedef void result_type; | |
47 typedef T * argument_type; | |
48 | |
49 void operator()(T * x) const | |
50 { | |
51 // boost:: disables ADL | |
52 boost::checked_delete(x); | |
53 } | |
54 }; | |
55 | |
56 template<class T> struct checked_array_deleter | |
57 { | |
58 typedef void result_type; | |
59 typedef T * argument_type; | |
60 | |
61 void operator()(T * x) const | |
62 { | |
63 boost::checked_array_delete(x); | |
64 } | |
65 }; | |
66 | |
67 } // namespace boost | |
68 | |
69 #endif // #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED |