1 // boost utility.hpp header file -------------------------------------------//
3 // (C) Copyright boost.org 1999. Permission to copy, use, modify, sell
4 // and distribute this software is granted provided this copyright
5 // notice appears in all copies. This software is provided "as is" without
6 // express or implied warranty, and with no claim as to its suitability for
9 // See http://www.boost.org for most recent version including documentation.
11 // Classes appear in alphabetical order
14 // 21 May 01 checked_delete() and checked_array_delete() added (Beman Dawes,
15 // suggested by Dave Abrahams, generalizing idea from Vladimir Prus)
16 // 21 May 01 made next() and prior() inline (Beman Dawes)
17 // 26 Jan 00 protected noncopyable destructor added (Miki Jovanovic)
18 // 10 Dec 99 next() and prior() templates added (Dave Abrahams)
19 // 30 Aug 99 moved cast templates to cast.hpp (Beman Dawes)
20 // 3 Aug 99 cast templates added
21 // 20 Jul 99 name changed to utility.hpp
22 // 9 Jun 99 protected noncopyable default ctor
23 // 2 Jun 99 Initial Version. Class noncopyable only contents (Dave Abrahams)
25 #ifndef BOOST_UTILITY_HPP
26 #define BOOST_UTILITY_HPP
28 #include <boost/config.hpp> // broken compiler workarounds
29 #include <boost/static_assert.hpp>
30 #include <cstddef> // for size_t
31 #include <utility> // for std::pair
35 // checked_delete() and checked_array_delete() -----------------------------//
37 // verify that types are complete for increased safety
39 template< typename T >
40 inline void checked_delete(T * x)
42 BOOST_STATIC_ASSERT( sizeof(T) != 0 ); // assert type complete at point
47 template< typename T >
48 inline void checked_array_delete(T * x)
50 BOOST_STATIC_ASSERT( sizeof(T) != 0 ); // assert type complete at point
55 // next() and prior() template functions -----------------------------------//
57 // Helper functions for classes like bidirectional iterators not supporting
58 // operator+ and operator-.
61 // const std::list<T>::iterator p = get_some_iterator();
62 // const std::list<T>::iterator prev = boost::prior(p);
64 // Contributed by Dave Abrahams
67 inline T next(T x) { return ++x; }
70 inline T prior(T x) { return --x; }
73 // class noncopyable -------------------------------------------------------//
75 // Private copy constructor and copy assignment ensure classes derived from
76 // class noncopyable cannot be copied.
78 // Contributed by Dave Abrahams
85 private: // emphasize the following members are private
86 noncopyable( const noncopyable& );
87 const noncopyable& operator=( const noncopyable& );
93 #endif // BOOST_UTILITY_HPP