// 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 | |
// http://www.boost.org/LICENSE_1_0.txt) | |
#ifndef 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 <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 | |
}}} // namespace boost::parameter::aux | |
#endif // DEFAULT_050329_HPP | |