]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/parameter/aux_/default.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / parameter / aux_ / default.hpp
CommitLineData
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
10namespace 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
27namespace 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
84namespace 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