]>
Commit | Line | Data |
---|---|---|
1 | // Copyright Daniel Wallin, David Abrahams 2005. Use, modification and | |
2 | // distribution is subject to the Boost Software License, Version 1.0. (See | |
3 | // accompanying file LICENSE_1_0.txt or copy at | |
4 | // http://www.boost.org/LICENSE_1_0.txt) | |
5 | ||
6 | #ifndef DEFAULT_050329_HPP | |
7 | # define DEFAULT_050329_HPP | |
8 | ||
9 | # include <boost/detail/workaround.hpp> | |
10 | ||
11 | namespace boost { namespace parameter { namespace aux { | |
12 | ||
13 | // A wrapper for the default value passed by the user when resolving | |
14 | // the value of the parameter with the given Keyword | |
15 | template <class Keyword, class Value> | |
16 | struct default_ | |
17 | { | |
18 | default_(Value& x) | |
19 | : value(x) | |
20 | {} | |
21 | ||
22 | Value& value; | |
23 | }; | |
24 | ||
25 | // | |
26 | // lazy_default -- | |
27 | // | |
28 | // A wrapper for the default value computation function passed by | |
29 | // the user when resolving the value of the parameter with the | |
30 | // given keyword | |
31 | // | |
32 | # if BOOST_WORKAROUND(__EDG_VERSION__, <= 300) | |
33 | // These compilers need a little extra help with overload | |
34 | // resolution; we have empty_arg_list's operator[] accept a base | |
35 | // class to make that overload less preferable. | |
36 | template <class KW, class DefaultComputer> | |
37 | struct lazy_default_base | |
38 | { | |
39 | lazy_default_base(DefaultComputer const& x) | |
40 | : compute_default(x) | |
41 | {} | |
42 | DefaultComputer const& compute_default; | |
43 | }; | |
44 | ||
45 | template <class KW, class DefaultComputer> | |
46 | struct lazy_default | |
47 | : lazy_default_base<KW,DefaultComputer> | |
48 | { | |
49 | lazy_default(DefaultComputer const & x) | |
50 | : lazy_default_base<KW,DefaultComputer>(x) | |
51 | {} | |
52 | }; | |
53 | # define BOOST_PARAMETER_lazy_default_fallback lazy_default_base | |
54 | # else | |
55 | template <class KW, class DefaultComputer> | |
56 | struct lazy_default | |
57 | { | |
58 | lazy_default(const DefaultComputer& x) | |
59 | : compute_default(x) | |
60 | {} | |
61 | DefaultComputer const& compute_default; | |
62 | }; | |
63 | # define BOOST_PARAMETER_lazy_default_fallback lazy_default | |
64 | # endif | |
65 | ||
66 | }}} // namespace boost::parameter::aux | |
67 | ||
68 | #endif // DEFAULT_050329_HPP | |
69 |