]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | ////////////////////////////////////////////////////////////////////////////// |
2 | // | |
3 | // (C) Copyright Ion Gaztanaga 2015-2015. 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/container for documentation. | |
8 | // | |
9 | ////////////////////////////////////////////////////////////////////////////// | |
10 | ||
11 | #ifndef BOOST_CONTAINER_USES_ALLOCATOR_FWD_HPP | |
12 | #define BOOST_CONTAINER_USES_ALLOCATOR_FWD_HPP | |
13 | ||
14 | #include <boost/container/detail/workaround.hpp> | |
15 | #include <boost/container/detail/std_fwd.hpp> | |
16 | ||
17 | //! \file | |
18 | //! This header forward declares boost::container::constructible_with_allocator_prefix, | |
19 | //! boost::container::constructible_with_allocator_suffix and | |
20 | //! boost::container::uses_allocator. Also defines the following types: | |
21 | ||
22 | namespace boost { | |
23 | namespace container { | |
24 | ||
25 | #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED | |
26 | ||
27 | template <int Dummy = 0> | |
28 | struct std_allocator_arg_holder | |
29 | { | |
30 | static ::std::allocator_arg_t *dummy; | |
31 | }; | |
32 | ||
b32b8144 FG |
33 | template <int Dummy> //Silence null-reference compiler warnings |
34 | ::std::allocator_arg_t *std_allocator_arg_holder<Dummy>::dummy = reinterpret_cast< ::std::allocator_arg_t * >(0x1234); | |
7c673cae FG |
35 | |
36 | typedef const std::allocator_arg_t & allocator_arg_t; | |
37 | ||
38 | #else | |
39 | ||
40 | //! The allocator_arg_t struct is an empty structure type used as a unique type to | |
41 | //! disambiguate constructor and function overloading. Specifically, several types | |
42 | //! have constructors with allocator_arg_t as the first argument, immediately followed | |
43 | //! by an argument of a type that satisfies Allocator requirements | |
44 | typedef unspecified allocator_arg_t; | |
45 | ||
46 | #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED | |
47 | ||
48 | //! The `erased_type` struct is an empty struct that serves as a placeholder for a type | |
49 | //! T in situations where the actual type T is determined at runtime. For example, | |
50 | //! the nested type, `allocator_type`, is an alias for `erased_type` in classes that | |
51 | //! use type-erased allocators. | |
52 | struct erased_type {}; | |
53 | ||
54 | //! A instance of type | |
55 | //! allocator_arg_t | |
56 | static allocator_arg_t allocator_arg = BOOST_CONTAINER_DOC1ST(unspecified, *std_allocator_arg_holder<>::dummy); | |
57 | ||
58 | // @cond | |
59 | ||
60 | template <class T> | |
61 | struct constructible_with_allocator_suffix; | |
62 | ||
63 | template <class T> | |
64 | struct constructible_with_allocator_prefix; | |
65 | ||
66 | template <typename T, typename Allocator> | |
67 | struct uses_allocator; | |
68 | ||
69 | // @endcond | |
70 | ||
71 | }} // namespace boost { namespace container { | |
72 | ||
73 | #endif //BOOST_CONTAINER_USES_ALLOCATOR_HPP |