Ticket #3114: parameter_interface.patch

File parameter_interface.patch, 2.8 KB (added by Jeremiah Willcock, 13 years ago)

Patch to allow alternative interface

  • boost/parameter/aux_/tagged_argument.hpp

     
    9999    typename result_of0<F>::type
    100100    get_with_lazy_default(lazy_default<KW,F> const& x, int) const
    101101    {
    102         return x.compute_default();
     102        return x.compute_default(0);
    103103    }
    104104
    105105    template <class F>
     
    140140    template <class KW, class F>
    141141    typename result_of0<F>::type operator[](lazy_default<KW,F> const& x) const
    142142    {
    143         return x.compute_default();
     143        return x.compute_default(0);
    144144    }
    145145
    146146    template <class ParameterRequirements>
  • boost/parameter/aux_/arg_list.hpp

     
    114114    typename result_of0<F>::type
    115115    get(lazy_default<K,F> x) const
    116116    {
    117         return x.compute_default();
     117        return x.compute_default(0);
    118118    }
    119119#endif
    120120
     
    135135    operator[](
    136136        BOOST_PARAMETER_lazy_default_fallback<K,F> x) const
    137137    {
    138         return x.compute_default();
     138        return x.compute_default(0);
    139139    }
    140140
    141141    // No argument corresponding to ParameterRequirements::key_type
  • boost/parameter/aux_/default.hpp

     
    5252  };
    5353#  define BOOST_PARAMETER_lazy_default_fallback lazy_default_base
    5454# else
     55template <typename DefaultComputer, typename T, typename Enable = void>
     56struct use_template_call_helper {};
     57
     58template <typename DefaultComputer, typename T>
     59struct use_template_call_helper<DefaultComputer, T,
     60                                typename
     61                                  DefaultComputer
     62                                    ::boost_parameter_use_nested_template> {
     63  typedef typename boost::result_of<DefaultComputer()>::type type;
     64};
     65
    5566template <class KW, class DefaultComputer>
    5667struct lazy_default
    5768{
    5869    lazy_default(const DefaultComputer& x)
    59       : compute_default(x)
     70      : compute_default_obj(x)
    6071    {}
    61     DefaultComputer const& compute_default;
     72    DefaultComputer const& compute_default_obj;
     73
     74    template <typename T>
     75    typename boost::result_of<DefaultComputer()>::type
     76    compute_default(T, ...) const {
     77      return compute_default_obj();
     78    }
     79
     80    template <typename T>
     81    typename use_template_call_helper<DefaultComputer, T>::type
     82    compute_default(T) const {
     83      return compute_default_obj(0);
     84    }
    6285};
    6386#  define BOOST_PARAMETER_lazy_default_fallback lazy_default
    6487# endif