rvalue reference to this allows you to create member functions, callable if this is in fact rvalue. it is similar to const member functions. for member function foo() a syntax would like this:
void foo() &&;
nice and straight forward. but that's where const-analogy breaks. for const and non-const overloads one does:
void foo(); void foo() const;
now let's try it with rvalue:
void foo(); void foo() &&;
and now computer says “no”:
error: ‘void X::foo() &&’ cannot be overloaded void foo() &&; ^ error: with ‘void X::foo()’ void foo(); ^
what is going on? at first i though this feature is not yet implemented on GCC. after double checking – it IS implemented… so let's try clang:
error: cannot overload a member function with ref-qualifier '&&' with a member function without a ref-qualifier void foo() &&; ^ note: previous declaration is here void foo(); ^
as usually clang is a bit more human friendly here. already see the problem? code should look like this:
void foo() &; // <-- '&' here... void foo() &&;
it appears that member functions, when overload for ref, need proper ref-qualifier on both overloads! why it is so? it is still a mystery to me…
btw: if you wonder about this:
void foo(); void foo() &; void foo() &&;
no – it does not work:
error: cannot overload a member function with ref-qualifier '&' with a member function without a ref-qualifier