Ich verstehe nicht, warum der folgende Code auf GCC kompiliert 8.0:Warum bindet diese Rvalue-Referenz an einen Lvalue?
decltype(auto) foo(int&& r) {
return r;
}
In foo
ist die Erklärung Art von r
int&&
, und so der Rückgabetyp von foo
ist auch int&&
. Aber r
selbst ist ein Lvalue, und ein Lvalue kann nicht an eine Rvalue-Referenz binden.
Fehle ich etwas?
Reproduziert mit [gcc8] (https://wandbox.org/permlink/4CSGrHnZ26nGL8QK), es scheint gcc8 abgeleitete den Rückgabetyp zu sein "Int &". – songyuanyao
@songyuanyao Sie behaupten, der Code kompiliert, so dass es keine Repro wäre. –
@BaummitAugen Der feste Code kompiliert mit [gcc8] (https://wandbox.org/permlink/7mUFIa2VVAwgprEM), aber nicht [clang6] (https://wandbox.org/permlink/3lpIoyciSWUisYh7). – songyuanyao