summaryrefslogtreecommitdiff
path: root/boost/parameter/aux_/default.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/parameter/aux_/default.hpp')
-rw-r--r--boost/parameter/aux_/default.hpp147
1 files changed, 89 insertions, 58 deletions
diff --git a/boost/parameter/aux_/default.hpp b/boost/parameter/aux_/default.hpp
index 604da61299..531111c3e8 100644
--- a/boost/parameter/aux_/default.hpp
+++ b/boost/parameter/aux_/default.hpp
@@ -1,69 +1,100 @@
-// Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
-// distribution is subject to the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
+// Copyright Daniel Wallin, David Abrahams 2005.
+// Copyright Cromwell D. Enage 2017.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#ifndef DEFAULT_050329_HPP
-# define DEFAULT_050329_HPP
+#define DEFAULT_050329_HPP
-# include <boost/detail/workaround.hpp>
+namespace boost { namespace parameter { namespace aux {
+
+ // A wrapper for the default value passed by the user when resolving
+ // the value of the parameter with the given Keyword
+ template <typename Keyword, typename Value>
+ struct default_
+ {
+ inline BOOST_CONSTEXPR default_(Value& x) : value(x)
+ {
+ }
+
+ Value& value;
+ };
+}}} // namespace boost::parameter::aux
+
+#include <boost/parameter/config.hpp>
+
+namespace boost { namespace parameter { namespace aux {
+
+ // lazy_default -- A wrapper for the default value computation function
+ // passed by the user when resolving the value of the parameter with the
+ // given keyword.
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 300)
+ // These compilers need a little extra help with overload resolution;
+ // we have empty_arg_list's operator[] accept a base class
+ // to make that overload less preferable.
+ template <typename KW, typename DefaultComputer>
+ struct lazy_default_base
+ {
+ inline BOOST_CONSTEXPR lazy_default_base(DefaultComputer& x)
+ : compute_default(x)
+ {
+ }
+
+ DefaultComputer& compute_default;
+ };
+
+ template <typename KW, typename DefaultComputer>
+ struct lazy_default
+ : ::boost::parameter::aux::lazy_default_base<KW,DefaultComputer>
+ {
+ inline BOOST_CONSTEXPR lazy_default(DefaultComputer& x)
+ : ::boost::parameter::aux::lazy_default_base<KW,DefaultComputer>(x)
+ {
+ }
+ };
+#else // !BOOST_WORKAROUND(__EDG_VERSION__, <= 300)
+ template <typename KW, typename DefaultComputer>
+ struct lazy_default
+ {
+ inline BOOST_CONSTEXPR lazy_default(DefaultComputer& x)
+ : compute_default(x)
+ {
+ }
+
+ DefaultComputer& compute_default;
+ };
+#endif // EDG workarounds needed.
+}}} // namespace boost::parameter::aux
+
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 300)
+#define BOOST_PARAMETER_lazy_default_fallback \
+ ::boost::parameter::aux::lazy_default_base
+/**/
+#else
+#define BOOST_PARAMETER_lazy_default_fallback \
+ ::boost::parameter::aux::lazy_default
+/**/
+#endif
+
+#if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING)
+
+#include <utility>
namespace boost { namespace parameter { namespace aux {
-// A wrapper for the default value passed by the user when resolving
-// the value of the parameter with the given Keyword
-template <class Keyword, class Value>
-struct default_
-{
- default_(Value& x)
- : value(x)
- {}
-
- Value& value;
-};
-
-//
-// lazy_default --
-//
-// A wrapper for the default value computation function passed by
-// the user when resolving the value of the parameter with the
-// given keyword
-//
-# if BOOST_WORKAROUND(__EDG_VERSION__, <= 300)
-// These compilers need a little extra help with overload
-// resolution; we have empty_arg_list's operator[] accept a base
-// class to make that overload less preferable.
-template <class KW, class DefaultComputer>
-struct lazy_default_base
-{
- lazy_default_base(DefaultComputer const& x)
- : compute_default(x)
- {}
- DefaultComputer const& compute_default;
-};
-
-template <class KW, class DefaultComputer>
-struct lazy_default
- : lazy_default_base<KW,DefaultComputer>
- {
- lazy_default(DefaultComputer const & x)
- : lazy_default_base<KW,DefaultComputer>(x)
- {}
- };
-# define BOOST_PARAMETER_lazy_default_fallback lazy_default_base
-# else
-template <class KW, class DefaultComputer>
-struct lazy_default
-{
- lazy_default(const DefaultComputer& x)
- : compute_default(x)
- {}
- DefaultComputer const& compute_default;
-};
-# define BOOST_PARAMETER_lazy_default_fallback lazy_default
-# endif
+ template <typename Keyword, typename Value>
+ struct default_r_
+ {
+ inline BOOST_CONSTEXPR default_r_(Value&& x)
+ : value(::std::forward<Value>(x))
+ {
+ }
+ Value&& value;
+ };
}}} // namespace boost::parameter::aux
-#endif // DEFAULT_050329_HPP
+#endif // BOOST_PARAMETER_HAS_PERFECT_FORWARDING
+#endif // include guard