Reference binding in C++23 - bug of gcc?
От: rg45 СССР  
Дата: 31.01.25 19:07
Оценка:
Случайно налетел на такой вот спецэффект: gcc в режиме C++23 выдает такую вот ошибку:

http://coliru.stacked-crooked.com/a/eb3fe810d33f1ebb

int& lvalue(int&& i)
{
    return i; // error: cannot bind non-const lvalue reference of type 'int&' to an rvalue of type 'int'
}


Полез в стандарт. Там всё по-прежнему:

https://timsong-cpp.github.io/cppwp/basic.lval#4

In general, the effect of this rule is that named rvalue references are treated as lvalues and unnamed rvalue references to objects are treated as xvalues; rvalue references to functions are treated as lvalues whether named or not.


"Спецэффект" устраняется простым добавлением промежуточной ссылки:

http://coliru.stacked-crooked.com/a/56ab7b159e1927e7

int& lvalue(int&& i)
{
    int& r = i; // OK
    return r;
}


А теперь, внимание, вопрос: что это за хрень?
--
Справедливость выше закона. А человечность выше справедливости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.