
On 11-01-2013 04:37, Nathan Ridge wrote:
Passing range by ref (&) is fine, but using (&&) results in and error. Any ideas?
[snip]
When you pass by T&&, the deduced type of T will include the reference. (So e.g. if you have a T&& argument and you pass in an int rvalue, T will be deduced as 'const int&'. If you pass an int lvalue, T will be deduced as 'int&'. This is in contrast to a regular reference, like T&, where if you pass an int lvalue, T will be deduced as just 'int').
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