Chris@16
|
1
|
Chris@16
|
2 // Copyright 2005-2011 Daniel James.
|
Chris@16
|
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5
|
Chris@16
|
6 // Note: if you change this include guard, you also need to change
|
Chris@16
|
7 // container_fwd_compile_fail.cpp
|
Chris@16
|
8 #if !defined(BOOST_DETAIL_CONTAINER_FWD_HPP)
|
Chris@16
|
9 #define BOOST_DETAIL_CONTAINER_FWD_HPP
|
Chris@16
|
10
|
Chris@101
|
11 #if defined(_MSC_VER) && \
|
Chris@16
|
12 !defined(BOOST_DETAIL_TEST_CONFIG_ONLY)
|
Chris@16
|
13 # pragma once
|
Chris@16
|
14 #endif
|
Chris@16
|
15
|
Chris@16
|
16 #include <boost/config.hpp>
|
Chris@16
|
17 #include <boost/detail/workaround.hpp>
|
Chris@16
|
18
|
Chris@16
|
19 ////////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
20 // //
|
Chris@16
|
21 // Define BOOST_DETAIL_NO_CONTAINER_FWD if you don't want this header to //
|
Chris@16
|
22 // forward declare standard containers. //
|
Chris@16
|
23 // //
|
Chris@16
|
24 // BOOST_DETAIL_CONTAINER_FWD to make it foward declare containers even if it //
|
Chris@16
|
25 // normally doesn't. //
|
Chris@16
|
26 // //
|
Chris@16
|
27 // BOOST_DETAIL_NO_CONTAINER_FWD overrides BOOST_DETAIL_CONTAINER_FWD. //
|
Chris@16
|
28 // //
|
Chris@16
|
29 ////////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
30
|
Chris@16
|
31 #if !defined(BOOST_DETAIL_NO_CONTAINER_FWD)
|
Chris@16
|
32 # if defined(BOOST_DETAIL_CONTAINER_FWD)
|
Chris@16
|
33 // Force forward declarations.
|
Chris@16
|
34 # elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
|
Chris@16
|
35 // STLport
|
Chris@16
|
36 # define BOOST_DETAIL_NO_CONTAINER_FWD
|
Chris@16
|
37 # elif defined(__LIBCOMO__)
|
Chris@16
|
38 // Comeau STL:
|
Chris@16
|
39 # define BOOST_DETAIL_NO_CONTAINER_FWD
|
Chris@16
|
40 # elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
|
Chris@16
|
41 // Rogue Wave library:
|
Chris@16
|
42 # define BOOST_DETAIL_NO_CONTAINER_FWD
|
Chris@16
|
43 # elif defined(_LIBCPP_VERSION)
|
Chris@16
|
44 // libc++
|
Chris@16
|
45 # define BOOST_DETAIL_NO_CONTAINER_FWD
|
Chris@16
|
46 # elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
|
Chris@16
|
47 // GNU libstdc++ 3
|
Chris@16
|
48 //
|
Chris@16
|
49 // Disable forwarding for all recent versions, as the library has a
|
Chris@16
|
50 // versioned namespace mode, and I don't know how to detect it.
|
Chris@16
|
51 # if __GLIBCXX__ >= 20070513 \
|
Chris@16
|
52 || defined(_GLIBCXX_DEBUG) \
|
Chris@16
|
53 || defined(_GLIBCXX_PARALLEL) \
|
Chris@16
|
54 || defined(_GLIBCXX_PROFILE)
|
Chris@16
|
55 # define BOOST_DETAIL_NO_CONTAINER_FWD
|
Chris@16
|
56 # else
|
Chris@16
|
57 # if defined(__GLIBCXX__) && __GLIBCXX__ >= 20040530
|
Chris@16
|
58 # define BOOST_CONTAINER_FWD_COMPLEX_STRUCT
|
Chris@16
|
59 # endif
|
Chris@16
|
60 # endif
|
Chris@16
|
61 # elif defined(__STL_CONFIG_H)
|
Chris@16
|
62 // generic SGI STL
|
Chris@16
|
63 //
|
Chris@16
|
64 // Forward declaration seems to be okay, but it has a couple of odd
|
Chris@16
|
65 // implementations.
|
Chris@16
|
66 # define BOOST_CONTAINER_FWD_BAD_BITSET
|
Chris@16
|
67 # if !defined(__STL_NON_TYPE_TMPL_PARAM_BUG)
|
Chris@16
|
68 # define BOOST_CONTAINER_FWD_BAD_DEQUE
|
Chris@16
|
69 # endif
|
Chris@16
|
70 # elif defined(__MSL_CPP__)
|
Chris@16
|
71 // MSL standard lib:
|
Chris@16
|
72 # define BOOST_DETAIL_NO_CONTAINER_FWD
|
Chris@16
|
73 # elif defined(__IBMCPP__)
|
Chris@16
|
74 // The default VACPP std lib, forward declaration seems to be fine.
|
Chris@16
|
75 # elif defined(MSIPL_COMPILE_H)
|
Chris@16
|
76 // Modena C++ standard library
|
Chris@16
|
77 # define BOOST_DETAIL_NO_CONTAINER_FWD
|
Chris@16
|
78 # elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
|
Chris@16
|
79 // Dinkumware Library (this has to appear after any possible replacement
|
Chris@16
|
80 // libraries)
|
Chris@16
|
81 # else
|
Chris@16
|
82 # define BOOST_DETAIL_NO_CONTAINER_FWD
|
Chris@16
|
83 # endif
|
Chris@16
|
84 #endif
|
Chris@16
|
85
|
Chris@16
|
86 #if !defined(BOOST_DETAIL_TEST_CONFIG_ONLY)
|
Chris@16
|
87
|
Chris@16
|
88 #if defined(BOOST_DETAIL_NO_CONTAINER_FWD) && \
|
Chris@16
|
89 !defined(BOOST_DETAIL_TEST_FORCE_CONTAINER_FWD)
|
Chris@16
|
90
|
Chris@16
|
91 #include <deque>
|
Chris@16
|
92 #include <list>
|
Chris@16
|
93 #include <vector>
|
Chris@16
|
94 #include <map>
|
Chris@16
|
95 #include <set>
|
Chris@16
|
96 #include <bitset>
|
Chris@16
|
97 #include <string>
|
Chris@16
|
98 #include <complex>
|
Chris@16
|
99
|
Chris@16
|
100 #else
|
Chris@16
|
101
|
Chris@16
|
102 #include <cstddef>
|
Chris@16
|
103
|
Chris@16
|
104 #if defined(BOOST_CONTAINER_FWD_BAD_DEQUE)
|
Chris@16
|
105 #include <deque>
|
Chris@16
|
106 #endif
|
Chris@16
|
107
|
Chris@16
|
108 #if defined(BOOST_CONTAINER_FWD_BAD_BITSET)
|
Chris@16
|
109 #include <bitset>
|
Chris@16
|
110 #endif
|
Chris@16
|
111
|
Chris@16
|
112 #if defined(BOOST_MSVC)
|
Chris@16
|
113 #pragma warning(push)
|
Chris@16
|
114 #pragma warning(disable:4099) // struct/class mismatch in fwd declarations
|
Chris@16
|
115 #endif
|
Chris@16
|
116
|
Chris@16
|
117 namespace std
|
Chris@16
|
118 {
|
Chris@16
|
119 template <class T> class allocator;
|
Chris@16
|
120 template <class charT, class traits, class Allocator> class basic_string;
|
Chris@16
|
121
|
Chris@16
|
122 template <class charT> struct char_traits;
|
Chris@16
|
123
|
Chris@16
|
124 #if defined(BOOST_CONTAINER_FWD_COMPLEX_STRUCT)
|
Chris@16
|
125 template <class T> struct complex;
|
Chris@16
|
126 #else
|
Chris@16
|
127 template <class T> class complex;
|
Chris@16
|
128 #endif
|
Chris@16
|
129
|
Chris@16
|
130 #if !defined(BOOST_CONTAINER_FWD_BAD_DEQUE)
|
Chris@16
|
131 template <class T, class Allocator> class deque;
|
Chris@16
|
132 #endif
|
Chris@16
|
133
|
Chris@16
|
134 template <class T, class Allocator> class list;
|
Chris@16
|
135 template <class T, class Allocator> class vector;
|
Chris@16
|
136 template <class Key, class T, class Compare, class Allocator> class map;
|
Chris@16
|
137 template <class Key, class T, class Compare, class Allocator>
|
Chris@16
|
138 class multimap;
|
Chris@16
|
139 template <class Key, class Compare, class Allocator> class set;
|
Chris@16
|
140 template <class Key, class Compare, class Allocator> class multiset;
|
Chris@16
|
141
|
Chris@16
|
142 #if !defined(BOOST_CONTAINER_FWD_BAD_BITSET)
|
Chris@16
|
143 template <size_t N> class bitset;
|
Chris@16
|
144 #endif
|
Chris@16
|
145 template <class T1, class T2> struct pair;
|
Chris@16
|
146 }
|
Chris@16
|
147
|
Chris@16
|
148 #if defined(BOOST_MSVC)
|
Chris@16
|
149 #pragma warning(pop)
|
Chris@16
|
150 #endif
|
Chris@16
|
151
|
Chris@16
|
152 #endif // BOOST_DETAIL_NO_CONTAINER_FWD &&
|
Chris@16
|
153 // !defined(BOOST_DETAIL_TEST_FORCE_CONTAINER_FWD)
|
Chris@16
|
154
|
Chris@16
|
155 #endif // BOOST_DETAIL_TEST_CONFIG_ONLY
|
Chris@16
|
156
|
Chris@16
|
157 #endif
|