Boost logo

Boost :

From: Daniel Wallin (dalwan01_at_[hidden])
Date: 2005-05-09 05:01:24

David Abrahams wrote:
> The question is, what should we do about this? It turns out to be
> surprisingly hard to write the declarations of these temporary
> variables so they work in all cases. For example, v had to be a
> const& because in one case index_result<...>::type turned out to be
> char const[4]
> and when the default is used, it's
> double
> with p[value || ...] returning a double rvalue (by value).
> Thoughts?

Make the user add reference to the Default type instead of

   template<class Params>
   void f_impl(const Params& p)
       typename boost::parameter::index_result<
         Params, struct name_>::type n = p[name];

       typename boost::parameter::index_result<
         Params, struct value_, double
>::type v = p[value || boost::bind(&value_default) ];

       typename boost::parameter::index_result<
         Params, struct index_, int
>::type i = p[index | 999];


So index_result<Params, Keyword, Default>::type would be either
Params[Keyword]::type& or Default.

And maybe add another metafunction that returns Params[Keyword]::type
without a reference.

Daniel Wallin

Boost list run by bdawes at, gregod at, cpdaniel at, john at