]> git.lyx.org Git - lyx.git/blob - 3rdparty/boost/boost/core/noncopyable.hpp
Update to boost 1.72
[lyx.git] / 3rdparty / boost / boost / core / noncopyable.hpp
1 //  Boost noncopyable.hpp header file  --------------------------------------//
2
3 //  (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost
4 //  Software License, Version 1.0. (See accompanying file
5 //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
7 //  See http://www.boost.org/libs/utility for documentation.
8
9 #ifndef BOOST_CORE_NONCOPYABLE_HPP
10 #define BOOST_CORE_NONCOPYABLE_HPP
11
12 #include <boost/config.hpp>
13
14 namespace boost {
15
16 //  Private copy constructor and copy assignment ensure classes derived from
17 //  class noncopyable cannot be copied.
18
19 //  Contributed by Dave Abrahams
20
21 namespace noncopyable_  // protection from unintended ADL
22 {
23 #ifndef BOOST_NONCOPYABLE_BASE_TOKEN_DEFINED
24 #define BOOST_NONCOPYABLE_BASE_TOKEN_DEFINED
25
26 // noncopyable derives from base_token to enable Type Traits to detect
27 // whether a type derives from noncopyable without needing the definition
28 // of noncopyable itself.
29 //
30 // The definition of base_token is macro-guarded so that Type Trais can
31 // define it locally without including this header, to avoid a dependency
32 // on Core.
33
34   struct base_token {};
35
36 #endif // #ifndef BOOST_NONCOPYABLE_BASE_TOKEN_DEFINED
37
38   class noncopyable: base_token
39   {
40   protected:
41 #if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS)
42       BOOST_CONSTEXPR noncopyable() = default;
43       ~noncopyable() = default;
44 #else
45       noncopyable() {}
46       ~noncopyable() {}
47 #endif
48 #if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
49       noncopyable( const noncopyable& ) = delete;
50       noncopyable& operator=( const noncopyable& ) = delete;
51 #else
52   private:  // emphasize the following members are private
53       noncopyable( const noncopyable& );
54       noncopyable& operator=( const noncopyable& );
55 #endif
56   };
57 }
58
59 typedef noncopyable_::noncopyable noncopyable;
60
61 } // namespace boost
62
63 #endif  // BOOST_CORE_NONCOPYABLE_HPP