]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | /*============================================================================== |
2 | Copyright (c) 2001-2010 Joel de Guzman | |
3 | Copyright (c) 2010 Eric Niebler | |
4 | Copyright (c) 2014-2015 John Fletcher | |
5 | Copyright (c) 2016 Kohei Takahashi | |
6 | ||
7 | Distributed under the Boost Software License, Version 1.0. (See accompanying | |
8 | file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
9 | ==============================================================================*/ | |
10 | #ifndef BOOST_PHOENIX_CONFIG_HPP | |
11 | #define BOOST_PHOENIX_CONFIG_HPP | |
12 | ||
13 | #include <boost/config.hpp> | |
14 | #include <boost/detail/workaround.hpp> | |
15 | ||
16 | ////////////////////////////////////////////////////////////////////////// | |
17 | // This section is to sort out whether hash types or unordered types | |
18 | // are available. This depends on whether stdlib or libc++ is being used | |
19 | // and also whether C++11 or C++03 is being used. | |
20 | ////////////////////////////////////////////////////////////////////////// | |
21 | // The idea is to set up the configuration without including the actual | |
22 | // headers unless that is unavoidable. | |
23 | // | |
24 | // The client code should contain the following to include headers | |
25 | // | |
26 | // #ifdef BOOST_PHOENIX_HAS_HASH | |
27 | // #include BOOST_PHOENIX_HASH_SET_HEADER | |
28 | // #include BOOST_PHOENIX_HASH_MAP_HEADER | |
29 | // #endif | |
30 | // | |
31 | // #ifdef BOOST_PHOENIX_HAS_UNORDERED_SET_AND_MAP | |
32 | // #include BOOST_PHOENIX_UNORDERED_SET_HEADER | |
33 | // #include BOOST_PHOENIX_UNORDERED_MAP_HEADER | |
34 | // #endif | |
35 | // | |
36 | // The client code can then chose the implementation provided. | |
37 | // See the example in test/stl/querying_find2.cpp | |
38 | ||
39 | // There is no specific thing in Boost Config for libc++ | |
40 | #ifdef _LIBCPP_VERSION | |
41 | #define BOOST_PHOENIX_USING_LIBCPP | |
42 | #endif | |
43 | ||
44 | // This may not be true for some very old version of libc++ | |
45 | // Current libc++ supports unordered_set and unordered_map without C++11. | |
46 | #if defined(BOOST_PHOENIX_USING_LIBCPP) \ | |
47 | && !(defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) || defined(BOOST_NO_CXX11_HDR_UNORDERED_SET)) | |
48 | // This is either libc++ or C++11 or later | |
49 | #define BOOST_PHOENIX_HAS_UNORDERED_SET_AND_MAP | |
50 | #define BOOST_PHOENIX_UNORDERED_SET_HEADER <unordered_set> | |
51 | #define BOOST_PHOENIX_UNORDERED_MAP_HEADER <unordered_map> | |
52 | #define BOOST_PHOENIX_UNORDERED_NAMESPACE std | |
53 | #endif | |
54 | ||
55 | #if defined(BOOST_HAS_HASH) | |
56 | // This is to sort out case of Clang when using stdlib from gcc | |
57 | // as Clang thinks it is gcc 4.2.1 | |
58 | // This prevents the failure to include a header with a warning. | |
59 | #define _GLIBCXX_PERMIT_BACKWARD_HASH | |
60 | #define BOOST_PHOENIX_HASH_SET_HEADER BOOST_HASH_SET_HEADER | |
61 | #define BOOST_PHOENIX_HASH_MAP_HEADER BOOST_HASH_MAP_HEADER | |
62 | #define BOOST_PHOENIX_HAS_HASH | |
63 | #define BOOST_PHOENIX_HASH_NAMESPACE BOOST_STD_EXTENSION_NAMESPACE | |
64 | #elif defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB < 610) | |
65 | #define BOOST_PHOENIX_HASH_SET_HEADER <hash_set> | |
66 | #define BOOST_PHOENIX_HASH_MAP_HEADER <hash_map> | |
67 | #define BOOST_PHOENIX_HAS_HASH | |
68 | #define BOOST_PHOENIX_HASH_NAMESPACE stdext | |
69 | #endif | |
70 | ||
71 | #if BOOST_WORKAROUND(BOOST_GCC, < 40100) | |
72 | #define BOOST_PHOENIX_SFINAE_AND_OVERLOADS , void* = 0 | |
73 | #else | |
74 | #define BOOST_PHOENIX_SFINAE_AND_OVERLOADS | |
75 | #endif | |
76 | ||
77 | #endif |