• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
64