====== 2014-12-15 - rvalue to this ====== 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