|
Boost : |
Subject: [boost] [range] adaptors vs. rvalue to lvalue& binding
From: Arno Schödl (aschoedl_at_[hidden])
Date: 2012-03-22 02:40:02
Hello,
ideally I would like to use range-adapted lvalue ranges like any other lvalue ranges. Writing it down naively, as below, does not compile because LoadRefRange takes (and should take?) the range it modifies by lvalue&, while adaptor expressions are rvalues.
template<typename Range>
void modifies_range( Range& rng );
A a[5];
main() {
// modifies all elements of a
modifies_range ( a );
// modifies all elements (except for one) of a
// adaptor is rvalue, does not compile:
modifies_range (
boost::range::join(
boost::adaptors::slice( a, 0, 1 ),
boost::adaptors::slice( a, 2, countof(a) )
)
);
// compiles, but ugly:
auto rng=boost::range::join(
boost::adaptors::slice( a, 0, 1 ),
boost::adaptors::slice( a, 2, countof(a) )
);
modifies_range(rng);
}
Any thoughts? Should adaptors receiving lvalues offer an
operator adaptor&() &&; // overload on rvalue-ness
so they are passing through the lvalue or their argument? A suitable baseclass a la boost::additive could do that.
Regards,
Arno
-- Dr. Arno Schödl | aschoedl_at_[hidden] Technical Director think-cell Software GmbH | Chausseestr. 8/E | 10115 Berlin | Germany http://www.think-cell.com | phone +49 30 666473-10 | US phone +1 800 891 8091 Amtsgericht Berlin-Charlottenburg, HRB 85229 | European Union VAT Id DE813474306 Directors: Dr. Markus Hannebauer, Dr. Arno Schoedl
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk