Tôi không hiểu tại sao đoạn mã sau biên dịch trên GCC 8.0:Tại sao tham chiếu rvalue này liên kết với một giá trị l?
decltype(auto) foo(int&& r) {
return r;
}
Trong foo
, kiểu tuyên bố r
là int&&
, và do đó kiểu trả về của foo
cũng là int&&
. Nhưng r
chính nó là một lvalue, và một lvalue không thể liên kết với một tham chiếu rvalue.
Tôi có thiếu gì đó không?
Sao chép với [gcc8] (https://wandbox.org/permlink/4CSGrHnZ26nGL8QK), có vẻ như gcc8 đã suy ra kiểu trả về là 'int &'. – songyuanyao
@songyuanyao Họ yêu cầu biên dịch mã, vì vậy sẽ không có repro. –
@BaummitAugen Mã cố định biên dịch với [gcc8] (https://wandbox.org/permlink/7mUFIa2VVAwgprEM), nhưng không phải [clang6] (https://wandbox.org/permlink/3lpIoyciSWUisYh7). – songyuanyao