]>
Commit | Line | Data |
---|---|---|
92f5a8d4 TL |
1 | // Copyright Daniel Wallin, David Abrahams 2005. |
2 | // Copyright Cromwell D. Enage 2017. | |
3 | // Distributed under the Boost Software License, Version 1.0. | |
4 | // (See accompanying file LICENSE_1_0.txt or copy at | |
7c673cae FG |
5 | // http://www.boost.org/LICENSE_1_0.txt) |
6 | ||
7 | #ifndef DEFAULT_050329_HPP | |
92f5a8d4 | 8 | #define DEFAULT_050329_HPP |
7c673cae | 9 | |
92f5a8d4 TL |
10 | namespace boost { namespace parameter { namespace aux { |
11 | ||
12 | // A wrapper for the default value passed by the user when resolving | |
13 | // the value of the parameter with the given Keyword | |
14 | template <typename Keyword, typename Value> | |
15 | struct default_ | |
16 | { | |
17 | inline BOOST_CONSTEXPR default_(Value& x) : value(x) | |
18 | { | |
19 | } | |
20 | ||
21 | Value& value; | |
22 | }; | |
23 | }}} // namespace boost::parameter::aux | |
24 | ||
25 | #include <boost/parameter/config.hpp> | |
26 | ||
27 | namespace boost { namespace parameter { namespace aux { | |
28 | ||
29 | // lazy_default -- A wrapper for the default value computation function | |
30 | // passed by the user when resolving the value of the parameter with the | |
31 | // given keyword. | |
32 | #if BOOST_WORKAROUND(__EDG_VERSION__, <= 300) | |
33 | // These compilers need a little extra help with overload resolution; | |
34 | // we have empty_arg_list's operator[] accept a base class | |
35 | // to make that overload less preferable. | |
36 | template <typename KW, typename DefaultComputer> | |
37 | struct lazy_default_base | |
38 | { | |
39 | inline BOOST_CONSTEXPR lazy_default_base(DefaultComputer& x) | |
40 | : compute_default(x) | |
41 | { | |
42 | } | |
43 | ||
44 | DefaultComputer& compute_default; | |
45 | }; | |
46 | ||
47 | template <typename KW, typename DefaultComputer> | |
48 | struct lazy_default | |
49 | : ::boost::parameter::aux::lazy_default_base<KW,DefaultComputer> | |
50 | { | |
51 | inline BOOST_CONSTEXPR lazy_default(DefaultComputer& x) | |
52 | : ::boost::parameter::aux::lazy_default_base<KW,DefaultComputer>(x) | |
53 | { | |
54 | } | |
55 | }; | |
56 | #else // !BOOST_WORKAROUND(__EDG_VERSION__, <= 300) | |
57 | template <typename KW, typename DefaultComputer> | |
58 | struct lazy_default | |
59 | { | |
60 | inline BOOST_CONSTEXPR lazy_default(DefaultComputer& x) | |
61 | : compute_default(x) | |
62 | { | |
63 | } | |
64 | ||
65 | DefaultComputer& compute_default; | |
66 | }; | |
67 | #endif // EDG workarounds needed. | |
68 | }}} // namespace boost::parameter::aux | |
69 | ||
70 | #if BOOST_WORKAROUND(__EDG_VERSION__, <= 300) | |
71 | #define BOOST_PARAMETER_lazy_default_fallback \ | |
72 | ::boost::parameter::aux::lazy_default_base | |
73 | /**/ | |
74 | #else | |
75 | #define BOOST_PARAMETER_lazy_default_fallback \ | |
76 | ::boost::parameter::aux::lazy_default | |
77 | /**/ | |
78 | #endif | |
79 | ||
80 | #if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) | |
81 | ||
82 | #include <utility> | |
7c673cae FG |
83 | |
84 | namespace boost { namespace parameter { namespace aux { | |
85 | ||
92f5a8d4 TL |
86 | template <typename Keyword, typename Value> |
87 | struct default_r_ | |
88 | { | |
89 | inline BOOST_CONSTEXPR default_r_(Value&& x) | |
90 | : value(::std::forward<Value>(x)) | |
91 | { | |
92 | } | |
7c673cae | 93 | |
92f5a8d4 TL |
94 | Value&& value; |
95 | }; | |
7c673cae FG |
96 | }}} // namespace boost::parameter::aux |
97 | ||
92f5a8d4 TL |
98 | #endif // BOOST_PARAMETER_HAS_PERFECT_FORWARDING |
99 | #endif // include guard | |
7c673cae | 100 |