Assigning this pointer to rvalue reference to a pointer
c++, c++11, rvalue-reference
Solution
Yes, that should compile.
It is incorrect to implement `this` as `cv T* const` (where cv is the cv-qualifiers for the function, if any, and `T` is the class type). `this` is not `const`, merely a prvalue expression of a built-in type (not modifiable).
Many people think that because you can't modify `this` it must be `const`, but as Johannes Schaub - litb once commented long ago, a much better explanation is something like this:
// by the compiler
#define this (__this + 0)
// where __this is the "real" value of this
Here it's clear that you can't modify `this` (say, `this = nullptr`), but also clear no `const` is necessary for such an explanation. (And the value you have in your constructor is just the value of the temporary.)
Problem
Should the following sample compile? ``` struct B; struct A { A(B*&&){} }; struct B : A { B() : A(this){} }; int main(){} ``` On LWS with clang it compiles, but with gcc I get: no known conversion for argument 1 from 'B* const' to 'B*&&' and if I add a `const` it compiles. I would like to also point out MSVC gets it wrong too: cannot convert parameter 2 from 'B *const ' to 'B *&&' so it looks like we have a bug in two compilers. BUGS FILED MSVC bug link GCC bug link