Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::range vs && (rvalue ref)
From: Nathan Ridge (zeratul976_at_[hidden])
Date: 2013-01-11 12:34:21


> Thorsten Ottosen wrote:
>
> > On 1--1--013 4::7,, Nathan Ridge wrote:
> >>
> >>> Passing range by ref (&) is fine, but using (&&) results in and error. Any
> >>> ideas?
> >>>
> >>> [snip]
> >>
> >> [snip]
> >>
> >> Range metafunctions don't accept references to range types as their
> >> input; you must pass the range type itself.
> >>
> >> So, you must call remove_reference<> on the deduced type 'T' prior to
> >> passing it to a range metafunction.
> >>
> >>
> >> I wonder if we should change the range metafunctions to accept
> >> references to range types, and do the reference stripping
> >> themselves?
> >
> > I think we should. This has come up before.
> >
> > -Thorsten
>
> My objective is to support this common type of usage:
>
> template<typename out_t>
> F (out_t & o) {
> }
>
> F (boost::make_iterator_range (blah.begin(), blah.end()));

I filed https://svn.boost.org/trac/boost/ticket/885 .

In the meantime, you can use the remove_reference workaround I mentioned,
as follows:

template<typename out_t>
void F (out_t && o)
{
     typedef typename boost::range_value<typename boost::remove_reference<out_t>::type>::type T;
}

Regards,
Nate
                                               


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net