1 //////////////////////////////////////////////////////////////////////////////
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)
7 // See http://www.boost.org/libs/container for documentation.
9 //////////////////////////////////////////////////////////////////////////////
11 #ifndef BOOST_CONTAINER_USES_ALLOCATOR_FWD_HPP
12 #define BOOST_CONTAINER_USES_ALLOCATOR_FWD_HPP
14 #include <boost/container/detail/workaround.hpp>
15 #include <boost/container/detail/std_fwd.hpp>
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:
25 #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
27 template <int Dummy = 0>
28 struct std_allocator_arg_holder
30 static ::std::allocator_arg_t *dummy;
34 ::std::allocator_arg_t *std_allocator_arg_holder<Dummy>::dummy;
36 typedef const std::allocator_arg_t & allocator_arg_t;
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;
46 #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
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 {};
54 //! A instance of type
56 static allocator_arg_t allocator_arg = BOOST_CONTAINER_DOC1ST(unspecified, *std_allocator_arg_holder<>::dummy);
61 struct constructible_with_allocator_suffix;
64 struct constructible_with_allocator_prefix;
66 template <typename T, typename Allocator>
67 struct uses_allocator;
71 }} // namespace boost { namespace container {
73 #endif //BOOST_CONTAINER_USES_ALLOCATOR_HPP