Size: a a a

2020 August 02

CD

Constantine Drozdov in pro.cxx.holywars
настрой там IDE чтобы она тебе писала либо
T& get_t_ref() &
либо
T&& get_t_cref() && = delete;
T const& get_t_cref() const&
источник

CD

Constantine Drozdov in pro.cxx.holywars
либо раскрывала T&& версию офк
источник

CD

Constantine Drozdov in pro.cxx.holywars
в
T get_t_rref() &&
источник

AZ

Alexander Zaitsev in pro.cxx.holywars
Constantine Drozdov
настрой там IDE чтобы она тебе писала либо
T& get_t_ref() &
либо
T&& get_t_cref() && = delete;
T const& get_t_cref() const&
а, ну всё сразу очевидно, да
источник

CD

Constantine Drozdov in pro.cxx.holywars
Alexander Zaitsev
а, ну всё сразу очевидно, да
по-моему половина народа до сих пор считает, что ref qualifier нужен для разрешения перегрузок
источник

CD

Constantine Drozdov in pro.cxx.holywars
а не его отсутствие (кроме естественных случаев типа operator =) является долбоебизмом автора
источник

CD

Constantine Drozdov in pro.cxx.holywars
вот тут растоманы нас обогнали на 100500 и заставили тупо this указать аргументом
источник

CD

Constantine Drozdov in pro.cxx.holywars
Alexander Zaitsev
а, ну всё сразу очевидно, да
#include <vector>

int main() {
   std::vector<int> x, y;

   x.swap(std::vector<int>{}); //CE
   std::vector<int>{}.swap(y); //OK
}
источник

CD

Constantine Drozdov in pro.cxx.holywars
хотя правильный ответ на второе - ты идешь на хуй по причине конченый долбоеб это записывается y = std::vector<int>{}
источник

/dev/urandon ¯\_(ツ)_... in pro.cxx.holywars
Constantine Drozdov
настрой там IDE чтобы она тебе писала либо
T& get_t_ref() &
либо
T&& get_t_cref() && = delete;
T const& get_t_cref() const&
Написал для Foo: T& get_t_ref() &

Дальше в коде появляется const Foo. Надо позвать get_t_ref, но результат никто модицифировать не будет. Что появляется? Копипаста
источник

CD

Constantine Drozdov in pro.cxx.holywars
/dev/urandon ¯\_(ツ)_/¯
Написал для Foo: T& get_t_ref() &

Дальше в коде появляется const Foo. Надо позвать get_t_ref, но результат никто модицифировать не будет. Что появляется? Копипаста
А как было до этого?
источник

CD

Constantine Drozdov in pro.cxx.holywars
& из const функции вернул?
источник

CD

Constantine Drozdov in pro.cxx.holywars
указательная константность?
источник

CD

Constantine Drozdov in pro.cxx.holywars
запрещается конструкция T{}.get_t_cref()
источник

CD

Constantine Drozdov in pro.cxx.holywars
говорят правильно T{}.get_t() (по значению)
источник

/dev/urandon ¯\_(ツ)_... in pro.cxx.holywars
Constantine Drozdov
А как было до этого?
К клавиатуре садиться лень.
Было в Foo T& get_t_ref() &.

Повился где-то Foo с const. И вот уже теперь у Foo есть:

T& get_t_ref() &;
const T& get_t_cref() const&;
T&& get_t_cref() && = delete;

Мило, правда? И очень читаемо
источник

CD

Constantine Drozdov in pro.cxx.holywars
/dev/urandon ¯\_(ツ)_/¯
К клавиатуре садиться лень.
Было в Foo T& get_t_ref() &.

Повился где-то Foo с const. И вот уже теперь у Foo есть:

T& get_t_ref() &;
const T& get_t_cref() const&;
T&& get_t_cref() && = delete;

Мило, правда? И очень читаемо
Так ты const обязан перегружать
источник

CD

Constantine Drozdov in pro.cxx.holywars
const T& get_t_cref() const&; //const& на самом деле просто так вместо const, бага языка
T&& get_t_cref() && = delete; //а вот это единственная добавленная строка
источник

CD

Constantine Drozdov in pro.cxx.holywars
//было
T& get_t_ref();
T const& get_t_cref() const;
источник

/dev/urandon ¯\_(ツ)_... in pro.cxx.holywars
Constantine Drozdov
Так ты const обязан перегружать
Обязан. Но вот что &&=delete будут соблюдать — полагаться на это не могу
источник